0

次の行を使用して入力したファイルの LinkedList があります。

File file = new File(directoryPath);
List<File> filesList = new LinkedList<File>(Arrays.asList(file.listFiles()));

これにより、指定された directoryPath 文字列内のすべてのファイルが取得されます。

次に、許可されているファイル拡張子の配列があり、一致しない内部のファイル (ディレクトリではない) を削除したいと考えています。

String[] file_ext = new String[] {"ext1", "ext2", "ext3"};

これを実装するにはどうすればよいですか?

4

4 に答える 4

1

このようなものを使用できます

final String[]  file_ext = new String[] {"ext1", "ext2", "ext3"};

FilenameFilter filter = new FilenameFilter() {

    @Override
    public boolean accept(File dir, String name) {
            for(int i=file_ext.length-1;i>=0;i--)
                if( name.endsWith( "." + file_ext[i]) )
                    return true;
            return false;
        }
    };

File file = new File(directoryPath);
List<File> filesList = new LinkedList<File>(Arrays.asList(file.listFiles(filter)));

更新: 「Borsi the Spider」のコメントによると、 などの誤った一致を避けるためfiles.notext1に、検索は.文字にも一致します

于 2013-08-04T13:01:24.090 に答える
0
  1. ファイルのリストを取得し、それらの名前が からの拡張子で終わっているかどうかを確認しfile_ext、そうであれば、それらをリストに追加しますfilesToDelete
  2. リストからファイルを削除しますfilesToDelete
于 2013-08-04T12:50:30.920 に答える
0

使うFileNameExtensionFilter

final FileNameExtensionFilter fnef = new FileNameExtensionFilter("", "ext1", "ext2", "ext3");
final List<File> files = new LinkedList<>();
for(final File f : new File(directoryPath).listFiles()) {
    if(fnef.accept(f)) files.add(f);
}

これは Swing によるものですが、希望通りの動作をし、EDT への依存関係や奇妙なことはありません。

をファサードにラップして、ワンライナーにすることもできFileNameExtensionFilterますFileFilter

final List<File> filesList = new LinkedList<>(Arrays.asList(new File(directoryPath).listFiles(new FileFilter() {
    final FileNameExtensionFilter fnef = new FileNameExtensionFilter("", "ext1", "ext2", "ext3");

    @Override
    public boolean accept(File pathname) {
        return fnef.accept(pathname);
    }
})));
于 2013-08-04T13:07:18.770 に答える