JFileChooser をディレクトリに制限するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/32529

  •  09-06-2019
  •  | 
  •  

質問

ユーザーをディレクトリとそのサブディレクトリに制限したいのですが、[親ディレクトリ] ボタンを使用すると任意のディレクトリを参照できます。

どうやってやればいいのでしょうか?

役に立ちましたか?

解決

おそらく独自に設定することでこれを行うことができます ファイルシステムビュー.

他のヒント

将来的に他の人がこれを必要とする場合に備えて:

class DirectoryRestrictedFileSystemView extends FileSystemView
{
    private final File[] rootDirectories;

    DirectoryRestrictedFileSystemView(File rootDirectory)
    {
        this.rootDirectories = new File[] {rootDirectory};
    }

    DirectoryRestrictedFileSystemView(File[] rootDirectories)
    {
        this.rootDirectories = rootDirectories;
    }

    @Override
    public File createNewFolder(File containingDir) throws IOException
    {       
        throw new UnsupportedOperationException("Unable to create directory");
    }

    @Override
    public File[] getRoots()
    {
        return rootDirectories;
    }

    @Override
    public boolean isRoot(File file)
    {
        for (File root : rootDirectories) {
            if (root.equals(file)) {
                return true;
            }
        }
        return false;
    }
}

明らかに、より適切な「createNewFolder」メソッドを作成する必要がありますが、これによりユーザーは 1 つ以上のディレクトリに制限されます。

そして、次のように使用します。

FileSystemView fsv = new DirectoryRestrictedFileSystemView(new File("X:\\"));
JFileChooser fileChooser = new JFileChooser(fsv);

またはこのように:

FileSystemView fsv = new DirectoryRestrictedFileSystemView( new File[] {
    new File("X:\\"),
    new File("Y:\\")
});
JFileChooser fileChooser = new JFileChooser(fsv);

アランの解決はほぼ完了した。次の 3 つの問題を解決する必要があります。

  1. 「ホーム」ボタンをクリックすると、ユーザーは制限から解放されます
  2. DirectoryRestrictedFileSystemView はパッケージ外からはアクセスできません
  3. 開始点はルートではありません

  1. @Override を DirectoryRestrictedFileSystemView に追加します

public TFile getHomeDirectory() { return rootDirectories[0]; }

  1. クラスとコンストラクターを設定する public

  2. 変化 JFileChooser fileChooser = new JFileChooser(fsv); の中へ JFileChooser fileChooser = new JFileChooser(fsv.getHomeDirectory(),fsv);

私はこれを、TrueZips TFileChooser 経由でユーザーが zip ファイル内にとどまることを制限するために使用しています。上記のコードを少し変更するだけで、これは完全に機能します。どうもありがとう。

そんなに複雑にする必要はありません。このように JFileChooser の選択モードを簡単に設定できます

JFileChooser fc = new JFileChooser();
fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
fc.setMultiSelectionEnabled(false);

ここで詳しいリファレンスを読むことができます ファイルセレクターの使用方法

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top