我想检查Java中的目录是否为空.但是有可能该目录中有许多文件,所以我想在不查询文件列表的情况下这样做,如果可能的话.
小智 84
使用JDK7,您可以使用Files.newDirectoryStream打开目录,然后使用迭代器的hasNext()方法测试是否有任何文件到迭代器(不要忘记关闭流).与java.io.File列表方法相比,这对于大型目录或目录在远程文件系统上的情况应该更好.
例:
private static boolean isDirEmpty(final Path directory) throws IOException {
try(DirectoryStream<Path> dirStream = Files.newDirectoryStream(directory)) {
return !dirStream.iterator().hasNext();
}
}
Run Code Online (Sandbox Code Playgroud)
Div*_*shu 23
File parentDir = file.getParentFile();
if(parentDir.isDirectory() && parentDir.list().length == 0) {
LOGGER.info("Directory is empty");
} else {
LOGGER.info("Directory is not empty");
}
Run Code Online (Sandbox Code Playgroud)
if(!Files.list(Paths.get(directory)).findAny().isPresent()){
Files.delete(Paths.get(directory));
}
Run Code Online (Sandbox Code Playgroud)
当Files.list返回延迟填充的Stream时,它将解决与执行时间有关的问题。
从源代码考虑,方法做:java.io.File list()
public java.lang.String[] list() {
...
byte[][] implList = listImpl(bs);
if (implList == null) {
// empty list
return new String[0];
}
...
}
private synchronized static native byte[][] listImpl(byte[] path);
Run Code Online (Sandbox Code Playgroud)
它调用一个传递字节数组的本机方法来从中获取文件.如果方法返回,null则表示目录为空.
这意味着,他们甚至没有本地方法,在没有列出文件的情况下检查目录空白,所以他们没有办法在java中有一个实现来检查目录是否为空.
结果:检查目录是否为空而没有列出文件尚未在java中实现.
boolean isEmptyDirectory(Path dir) throws IOException {
try (var entries = Files.list(dir)) {
return entries.count() == 0;
}
}
Run Code Online (Sandbox Code Playgroud)
与 @Minnow 的解决方案类似(但方法调用较少),该解决方案的优点是“当 Files.list 返回一个延迟填充的 Stream 时,它将解决与执行时间相关的问题。”
| 归档时间: |
|
| 查看次数: |
44925 次 |
| 最近记录: |