2017-10-26 9 views
-1

Javaですべてのファイルをマスクですべてのファイルをどのように反復処理するのですか?例えば、上記のディレクトリ内のすべてのファイル*.txtJava:マスクですべてのファイルとディレクトリを検索

D:\work\mytestfolder\temp\*.txt 

コレクションを取得する必要があります(またはイテレータまたは任意の他)などのワイルドカードとマスクがあります。

さらに詳しい情報。いくつかのファイルを処理したいのですが、上記のような一連のマスクを定義すると便利です。 GLOBE構文(https://docs.oracle.com/javase/7/docs/api/java/nio/file/FileSystem.html#getPathMatcher(java.lang.String))は非常に役立つように見え、望ましくはサポートされるはずです。

+3

何を試しましたか? – inxoy

+0

このhttps://docs.oracle.com/javase/tutorial/essential/io/find.htmlで苦労しています。とても単純な作業のために複雑すぎるようです。 – Alex

+0

@Alex、それほど悪くはありません。 Java8ではエンティティをストリームする 'Files :: walk'があります。最初のワイルドカードでマスクを分割し、最初の部分のパスを作成し、2番目の部分のPathMatcherを作成し、Pathからの歩行を開始し、PathMatcherを使用してストリームをフィルタリングします。 –

答えて

-1
File dir = new File("E:/Test"); 
File [] files = dir.listFiles(new FilenameFilter() { 
    @Override 
    public boolean accept(File dir, String name) { 
     return name.endsWith(".chm"); 
    } 
}); 

for (File xmlfile : files) { 
    System.out.println(xmlfile); 
} 
1

明示的なPathMatcherを作成する必要はありません。ただ使ってくださいFiles.newDirectoryStream

try (DirectoryStream<Path> dir = Files.newDirectoryStream(
     Paths.get("D:\\work\\mytestfolder\\temp"), "*.txt")) { 

    for (Path entry : dir) { 
     // ... 
    } 
} 
+0

これは動作し、十分に便利です!開始ディレクトリのサブディレクトリ(再帰的に) – Alex

+0

再帰的なトラバーサルの場合は、[Files.walk](https://docs.oracle.com/javase/9​​/docs/api/java/nio/file/Files.html#walk-java.nio)が必要です。 file.Path-java.nio.file.FileVisitOption ...-)または[Files.walkFileTree](https://docs.oracle.com/javase/9​​/docs/api/java/nio/file/Files.html) #walkFileTree-java.nio.file.Path-java.nio.file.FileVisitor-)。どちらもファイルマスクオプションはありませんが、明らかに各ファイルを自分で確認するのは簡単です。前者のメソッドはStreamを返します。 – VGR

+0

Java 8を使用することはできません(少なくとも現在は使用できません)。したがって、 '' Files.walk(dir).filter(p - >!Files.isDirectory(p)&& p.toString()。endsWith( "。txt" Files.walkFileTree'は明示的な 'PathMatcher'を使っているようです最良の選択...しかし、実際にあまりにも冗長な:( – Alex

関連する問題