17

Java 6 で記述されたファイル I/O トラバーサル コードがいくつかあり、それを Java 7 の新しい I/O に移動しようとしていますが、この種のものに代わるものが見つかりません。

File[] files = dir.listFiles(AudioFileFilter.getInstance());

つまり、ファイルのみのパスをフィルタリングする方法はなく、ファイルのリストを返すため、呼び出すメソッドで File の使用を制限したい場合は、各ファイルをパス (file.toPath) に変換する必要があります。 .

私は FileVisitor を見ましたが、これではツリーのトラバース方法を制御できないようですので、うまくいくとは思いません。

では、Java 7 の Path for File はどの程度の代替になるのでしょうか?

4

1 に答える 1

25

Files#newDirectoryStreamDirectoryStream.Filterの使用

コードは次のとおりです。

DirectoryStream<Path> stream = Files.newDirectoryStream(dir, new DirectoryStream.Filter<Path>() {

        @Override
        public boolean accept(Path entry) throws IOException 
        {
            return Files.isDirectory(entry);
        }
    });

for (Path entry: stream) {
      ...
}

ところで、簡単にするために、上記のコードでは例外処理を省略しました。

于 2013-02-15T11:08:50.900 に答える