- 静态的
Files.list
方法会返回一个可以读取目录中各个项的Stream<Path>
对象。目录是被惰性读取的,这使得处理具有大量项的目录可以变得高效
//因为读取目录涉及需要关闭的系统资源,所以应该使用try块
try(Stream<Path> entries = Files.list(pathToDirectory)){
} catch (IOException e){
e.printStackTrace();
}
list
方法不会进入子目录。为了处理目录中的所有子目录,需要使用File.walk
方法
try(Stream<Path> entries = Files.walk(pathToRoot)){
entries.forEach(p -> {
Path fileName = p.getFileName();
System.out.println(fileName);
});
} catch (IOException e){
e.printStackTrace();
}
- 无论何时,只要遍历的项是目录,那么在进入它之前,会继续访问它的兄弟项。
- 可以通过调用
Files.walk(pathToRoot,depth);
限制想要访问的树的深度。 - 这段代码使用了Files.walk方法将一个目录复制到另一个目录:
try(Stream<Path> entries = Files.walk(source)){
entries.forEach(p -> {
Path q = target.resolve(source.relative(p));
if(Files.isDirectory(p))
Files.createDirectory(q);
else
Files.copy(p.q);
});
} catch (IOException e){
e.printStackTrace();
}