1

現在、ディレクトリからファイルを選択するアプリケーションがあります。私がやりたいのは.gif.txtなどのファイル拡張子を入力できる機能を使用できるようにすることです。ボタンをクリックすると、アプリケーションがディレクトリを実行し、そのタイプのすべてのファイルを検索して選択します。私が示さなければならない唯一のコードは、これを持たない私の現在のアプリケーションのものです。正しい方向へのポイントやアドバイスを期待していた。

4

4 に答える 4

3
private List<File> getMatchingFiles(File parent, final String extension) {
    File[] files = parent.listFiles(new FileFilter() {

        public boolean accept(File dir) {
            String name = dir.getName();
            if(name.endsWith(extension)) {
                return true;
            }
        }
    });

    List<File> retval = Arrays.asList( files );
    return retval;
}
于 2012-11-16T05:46:26.020 に答える
3

で使用する場合、JFileChooserこれまでに提供されたすべての回答は最適ではありません。代わり JFileChooser.setFileFilter(javax.swing.filechooser.FileFilter)に、最高のユーザーエクスペリエンスを実現するために実装してください。

次のようになってしまう可能性があります1

ファイルフィルター付きのJFileChooser

  1. サンプルFileChooserプログラムの提供によるコードを使用して取得された画像。
于 2012-11-16T07:14:18.480 に答える
2

探しているのはおそらくjava.io.File#list(filter)です。

編集:ファイルシステム全体を検索する場合は、すべてのディレクトリを再帰的にスキャンする必要があります。

public static void filter (String dirname, List<File> result) {
    try {
        for (String f : new File(dirname).list()) {
            String filename = dirname + f;
            File theFile = new File(filename);
            if (theFile.isDirectory()) {
                filter(filename + "/", result);
            } else if (new FileFilter() {
                public boolean accept(File pathname) {
                    return pathname.getName().endsWith(".gif");
                }
            }.accept(theFile)) {
                result.add(theFile);
            }
        }
    } catch (Exception e) {
        // may raise null-pointer when access denied
    }
}

public static void main(String[] args) {
    List<File> result = new ArrayList<File>();
    filter("F:/", result);

    System.out.println(result.size());
}
于 2012-11-16T05:53:19.747 に答える
1
FilenameFilter filter = new FilenameFilter() {
  public boolean accept(File dir, String name) {
   return (!name.endsWith(".gif") 
    }
};
于 2012-11-16T05:47:05.350 に答える