talosのプログラミング教室

Java Gold合格への道 ~Java I/O・ファイルツリーのトラバース~

スポンサーリンク

こんにちは。たろすです。

今回はJava I/Oのファイルツリーのトラバースについて説明します。

方法

ファイルのトラバースはwalkFileTreeメソッドやwalkメソッドで行います。

walkFileTree

try {
	Files.walkFileTree(Paths.get("dir0"), new SimpleFileVisitor<Path>() {
		public FileVisitResult preVisitDirectory(Path file, BasicFileAttributes attrs) throws IOException {
			System.out.println(file);
			return FileVisitResult.CONTINUE;
		}
	});
} catch (IOException e) {
	e.printStackTrace();
}
dir0
dir0\dir1
dir0\dir2
dir0\dir2\dir3
dir0\dir2\dir4
dir0\dir2\dir4\dir5

第一引数は始点となるパスで、第二引数はFileVisitorインタフェースです。

SimpleFileVisitorクラスはFileVisitorクラスの簡易実装として四つのメソッドの実装を提供しています。

今回はディレクトリ内のエントリをたどる前に呼び出されるpreVisitDirectoryのみオーバーライドしました。

その他に以下のメソッドがあります。

postVisitDirectory:ディレクトリ内のエントリおよびそれらのサブディレクトリをたどった後に呼び出される。

visitFile:ディレクトリ内のファイルをたどった際に呼び出される。

visitFileFailed:たどれなかったファイルに対して呼び出される。

walk

try {
	Files.walk(Paths.get("dir0")).forEach(System.out::println);
} catch (IOException e) {
	e.printStackTrace();
}
dir0
dir0\dir1
dir0\dir2
dir0\dir2\dir3
dir0\dir2\dir4
dir0\dir2\dir4\dir5

walkメソッドも第一引数は始点となるパスです。

戻り値はStream<Path>オブジェクトです。

おわりに

今回はJava I/Oのファイルツリーのトラバースについて説明しました。