gpt4 book ai didi

java - Files.list 和 Files.walkFileTree 和 Files.walk with maxdepth = 1 有什么区别?

转载 作者:搜寻专家 更新时间:2023-10-31 19:37:18 28 4
gpt4 key购买 nike

如果我只想对目录第一级的文件做一些事情,使用 Files.list(...)Files.walkFileTree(...)Files.walk(...)< 有区别吗?

Files.walkFileTree(directory, Collections.emptySet(), 1, new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
doSomething(file);
return FileVisitResult.CONTINUE;
}

@Override
public FileVisitResult visitFileFailed(Path file, IOException exc) {
// log exc
return FileVisitResult.CONTINUE;
}
});

对比

Files.list(directory)
.forEach(path -> {
try {
doSomething(path);
} catch (IOException exc) {
// log exc
}
});

对比

Files.walk(directory, 1)
.forEach(path -> {
try {
doSomething(path);
} catch (IOException exc) {
// log exc
}
});

最佳答案

使用以下代码作为测试,我掌握了问题的窍门。 walk*之间的主要区别和 list是那个list(dir)给出目录中的文件流 dir , 而两者都是 walk*方法遍历子树其参数包括子树的根——目录本身。

walk之间的区别和 walkFileTree是他们为遍历树提供了不同的接口(interface):walkFileTree需要 FileVisitor , walk给出 Stream<Path> .

public class FilesTest {
public static void main(String[] args) {
final String pwd = System.getProperty("user.dir");
System.out.println("Working Directory = " + pwd);
Path dir = Paths.get(pwd);
System.out.println("Files.walk");
try {
Files.walk(dir, 1).forEach(path -> FilesTest.doSomething("walk", path));
} catch (IOException e) {
logException("walk", e);
}
System.out.println("Files.walkFileTree");
try {
Files.walkFileTree(dir, Collections.emptySet(), 1, new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
doSomething("visitFile", file);
return FileVisitResult.CONTINUE;
}

@Override
public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException {
logException("visitFile", exc);
return FileVisitResult.CONTINUE;
}
});
} catch (IOException e) {
logException("walkFileTree", e);
}
System.out.println("Files.list");
try {
Files.list(dir).forEach(path -> FilesTest.doSomething("dir", path));
} catch (IOException e) {
logException("dir", e);
}
}

private static void logException(String title, IOException e) {
System.err.println(title + "\terror: " + e);
}

private static void doSomething(String title, Path file) {
System.out.println(title + "\t: " + file);
}
}

关于java - Files.list 和 Files.walkFileTree 和 Files.walk with maxdepth = 1 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37858082/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com