java files.walk_java – Files.list和Files.walkFileTree和Files.walk有什么区别,maxdepth = 1?...

如果我只想在目录的第一级对文件执行某些操作,

使用Files.list(…)或Files.walkFileTree(…)或Files.walk(…)有区别吗?

Files.walkFileTree(directory, Collections.emptySet(), 1, new SimpleFileVisitor() {

@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() {

@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,java-nio-file,nio2

来源: https://codeday.me/bug/20190611/1219487.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值