Pregunta

Quiero limitar a mis usuarios a un directorio y sus subdirectorios, pero el botón "Directorio principal" les permite buscar un directorio arbitrario.

¿Cómo debo hacer para hacer eso?

¿Fue útil?

Solución

Probablemente puedas hacer esto configurando el tuyo propio Vista del sistema de archivos.

Otros consejos

En caso de que alguien más necesite esto en el 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;
    }
}

Obviamente necesitarás crear un mejor método "createNewFolder", pero esto restringe al usuario a uno o más directorios.

Y úsalo así:

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

o así:

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

La solución de Allain está casi completa.Hay tres problemas abiertos a resolver:

  1. Al hacer clic en el botón "Inicio", el usuario sale de las restricciones.
  2. No se puede acceder a DirectoryRestrictedFileSystemView fuera del paquete
  3. El punto de partida no es Root

  1. Agregue @Override a DirectoryRestrictedFileSystemView

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

  1. establecer clase y constructor public

  2. Cambiar JFileChooser fileChooser = new JFileChooser(fsv); en JFileChooser fileChooser = new JFileChooser(fsv.getHomeDirectory(),fsv);

Lo uso para restringir a los usuarios a permanecer en un archivo zip a través de TrueZips TFileChooser y con ligeras modificaciones al código anterior, esto funciona perfectamente.Muchas gracias.

No hay necesidad de ser tan complicado.Puede configurar fácilmente el modo de selección de un JFileChooser como este

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

Puedes leer más referencias aquí. Cómo utilizar los selectores de archivos

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top