介绍
在Java中,使用文件和目录相当普遍。我们也经常对那些文件和目录的内容感兴趣。
根据文件的内容,我们可能希望表现不同。我们可能正在将一些数据写入文件,我们首先要检查它是否已经包含一些信息,然后再覆盖它。同样,如果目录为空,我们可能要删除它。在这种情况下,了解是否为空非常重要。
在本教程中,我们将介绍一些有关如何检查Java中文件或目录是否为空的示例。
检查Java中文件是否为空
有两种方法检查aFile
是否为空。
我们将处理两个文件,一个为空文件,另一个为非空文件:
09/17/2020 01:00 PM 0 file
09/17/2020 01:00 PM 2 file2
file
是0
字节长度,file2
而是2
字节长度。
值得注意的是,在对文件或目录执行任何操作之前,应检查文件或目录是否存在及其类型,以避免运行错误的方法。
使用File.length()
根据其文档,File
对象是“文件和目录路径名的抽象表示”。每个File
对象都有获取有关该特定文件的信息的方法。
让我们继续创建一个简单的辅助方法,true
如果File
的长度为0
,false
则返回,否则返回:
public boolean isFileEmpty(File file) {
return file.length() == 0;
}
现在,让我们在一个空的非空文件上对其进行测试:
File file1 = new File("/file");
File file2 = new File("/file2");
System.out.println(isFileEmpty(file1));
System.out.println(isFileEmpty(file2));
此代码返回:
true
false
使用BufferedReader
另一种检查File
的长度是否正确的方法0
是使用BufferedReader
。它使我们能够从流(例如文件)中访问字符内容。如果文件中没有内容,则为空:
public boolean isFileEmpty(File file) {
BufferedReader br = new BufferedReader(new FileReader(file));
return br.readLine() == null;
}
该方法的声明与以前相同:接受aFile
并返回a boolean
。尽管这次,我们实例化了一个,BufferedReader
并为其提供了一个FileReader
接受我们的File
。它比以前稍微复杂一些,但它也能很好地完成工作。
然后,如果BufferedReader
没有什么要从文件中读取的,我们知道它为空。
再次,让我们在一个空文件和一个非空文件上进行测试:
File file1 = new File("/file");
File file2 = new File("/file2");
System.out.println(isFileEmpty(file1));
System.out.println(isFileEmpty(file2));
此代码返回:
true
false
检查Java中目录是否为空
还有两种方法可以检查Java中目录是否为空。
使用File.list()
本File
类有收集所有的文件和目录(一种便利的方法项,这意味着文件和目录)指定的目录中。我们可以使用此方法检查此类条目的数量是否为零:
public boolean isDirectoryEmpty(File directory) {
String[] files = directory.list();
return files.length == 0;
}
该方法返回条目名称的数组。如果length
此数组的为0
,则目录为空。
让我们在一个空的非空目录上运行此命令:
File directory1 = new File("/empty_directory");
File directory2 = new File("/directory");
System.out.println(isDirectoryEmpty(directory1));
System.out.println(isDirectoryEmpty(directory1));
返回:
true
false
使用DirectoryStream
另一种快速但更先进的技术涉及使用流。首先,我们DirectoryStream
通过调用Files.newDirectoryStream()
class创建一个新的。此方法接受a,Path
因此我们需要通过调用方法将其转换File
为:PathtoPath()
public boolean isDirectoryEmpty(File directory) throws IOException {
DirectoryStream<Path> stream = Files.newDirectoryStream(directory.toPath());
return !stream.iterator().hasNext();
}
然后,我们收集流的迭代器,并通过调用来检查它是否包含下一个条目hasNext()
。如果它不包含至少一项,则该目录为空。
让我们运行以下代码:
File directory1 = new File("/empty_directory");
File directory2 = new File("/directory");
System.out.println(isDirectoryEmpty(directory1));
System.out.println(isDirectoryEmpty(directory1));
结果是:
true
false
结论
在本教程中,我们提供了一些示例来检查文件和目录是否为空。首先,我们使用File
类及其length()
方法检查了文件是否为空,然后使用一种BufferedReader
方法。
然后,我们通过使用File.list()
和创建一个目录来检查目录是否为空DirectoryStream
。