Domanda

Voglio limitare la mia utenti di una cartella e le sue sottocartelle, ma il "Parent Directory" pulsante permette di passare a una directory arbitraria.

Come devo procedere?

È stato utile?

Soluzione

Probabilmente si può fare impostando il proprio FileSystemView.

Altri suggerimenti

In caso di chiunque altro ha bisogno di questo in futuro:

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;
    }
}

Avrete ovviamente bisogno di fare meglio "createNewFolder" metodo, ma questo non limita l'accesso dell'utente a uno o più directory.

E di utilizzarlo come questo:

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

o come questa:

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

La soluzione di Allain è quasi completa.Tre problemi che sono aperti a risolvere:

  1. Cliccando il tasto "Home"Pulsante calci l'utente al di fuori delle restrizioni
  2. DirectoryRestrictedFileSystemView non è accessibile al di fuori del pacchetto
  3. Il punto di partenza non è Root

  1. Aggiungere @Override per DirectoryRestrictedFileSystemView

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

  1. set di classe e di costruttore public

  2. Cambiare JFileChooser fileChooser = new JFileChooser(fsv); in JFileChooser fileChooser = new JFileChooser(fsv.getHomeDirectory(),fsv);

Io lo uso per limitare l'accesso agli utenti di rimanere in un file zip via TrueZips TFileChooser e con delle piccole modifiche al codice di cui sopra, questo funziona perfettamente.Grazie mille.

Non c'è bisogno di essere così complicato.Si può facilmente impostare la modalità di selezione di un JFileChooser come questo

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

Si può leggere di più qui riferimento, Come Utilizzare i File di quel che passa il convento

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top