Java:遍历目录
首先
使用Java nio中引入的walkFileTree方法,可以轻松地遍历目录。我将写一篇文章来介绍这个方法,说它多么方便。
…
嗯,虽然我已经非常清楚现在这么说有点晚了,但是由于我的职场上使用的JRE版本仍然是1.6标准,所以在文件处理方面我仍然使用Java.io类。
自己实现了walkFileTree方法中的Visitor处理逻辑,真的让人很心累…
我想做的事情 (Wǒ zuò de
从C:/Java/jdk1.8.0_102/src提取出C:/Java/jdk1.8.0_102/src/javax/script中的Java文件中的公共类
提取公共类是通过定制功能文章中提到的源代码来完成的。
传递给walkFileTree的Visitor实现
每当我们实现FileVisitor接口时,需要重写其中定义的方法。重点是
-
- 戻り値でnullを返すと予期せぬところでNullPointerExceptionが発生するので、FileVisitResultを返すこと
- preVisitDirectoryを活用して無駄なファイルの入出力を抑止すること
是吗?
package triple;
import java.io.IOException;
import java.nio.file.FileVisitResult;
import java.nio.file.FileVisitor;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.attribute.BasicFileAttributes;
public class DirectroyWalkVistor implements FileVisitor<Path>{
private static final String DIRECTORY_ON_TARGET ="C:/Java/jdk1.8.0_102/src/javax/script";
public static void main(String args[]) throws Exception{
Files.walkFileTree(Paths.get("C:/Java/jdk1.8.0_102/src"), new DirectroyWalkVistor());
}
@Override
public FileVisitResult postVisitDirectory(Path file , IOException arg1) throws IOException {
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult preVisitDirectory(Path file, BasicFileAttributes arg1) throws IOException {
if(Paths.get(DIRECTORY_ON_TARGET).startsWith(file)){
//C:/Java/jdk1.8.0_102/src/javax/scriptに部分一致するときは処理を続ける
return FileVisitResult.CONTINUE;
}else{
//C:/Java/jdk1.8.0_102/src/javax/scriptに部分一致しない時はサブディレクトリの処理をスキップする
return FileVisitResult.SKIP_SUBTREE;
}
}
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes arg1) throws IOException {
try{
JavaFileAnalyser.execute(file);
}catch(Exception e){
throw new IOException(e);
}
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFileFailed(Path file, IOException arg1) throws IOException {
arg1.printStackTrace();
return FileVisitResult.CONTINUE;
}
}
印象
非常有趣!这句话可以用来形容它。
由于不需要繁琐的循环或递归处理文件夹,逻辑变得非常简单。