¿Cómo restrinjo JFileChooser a un directorio?
-
09-06-2019 - |
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?
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:
- Al hacer clic en el botón "Inicio", el usuario sale de las restricciones.
- No se puede acceder a DirectoryRestrictedFileSystemView fuera del paquete
- El punto de partida no es Root
- Agregue @Override a DirectoryRestrictedFileSystemView
public TFile getHomeDirectory()
{
return rootDirectories[0];
}
establecer clase y constructor
public
Cambiar
JFileChooser fileChooser = new JFileChooser(fsv);
enJFileChooser 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