java – Files.list和Files.walkFileTree和Files.walk有什么区别,maxdepth = 1?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – Files.list和Files.walkFileTree和Files.walk有什么区别,maxdepth = 1?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2208字,纯文字阅读大概需要4分钟。
内容图文
如果我只想在目录的第一级对文件执行某些操作,
使用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之间的区别在于它们为步行树提供了不同的接口: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有什么区别,maxdepth = 1?全部内容,希望文章能够帮你解决java – Files.list和Files.walkFileTree和Files.walk有什么区别,maxdepth = 1?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。