java - open - ¿Cómo restrinjo JFileChooser a un directorio?
jfilechooser java swing examples (4)
En caso de que alguien más lo necesite 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 tendrá que hacer un mejor método de "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);
Quiero limitar a mis usuarios a un directorio y sus subdirectorios, pero el botón "Directorio principal" les permite navegar a un directorio arbitrario.
¿Cómo debo hacer eso?
La solución de Allain está casi completa. Tres problemas están abiertos a resolver:
- Al hacer clic en "Inicio", el botón expulsa al usuario de las restricciones
- DirectoryRestrictedFileSystemView no es accesible fuera del paquete
- El punto de partida no es Root
- Agregar @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 comprimido a través de TrueZips TFileChooser y con ligeras modificaciones al código anterior, esto funciona perfectamente. Muchas gracias.
No es necesario que sea tan complicado. Puede establecer fácilmente el modo de selección de un JFileChooser como este
JFileChooser fc = new JFileChooser();
fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
fc.setMultiSelectionEnabled(false);
Puede leer más referencia aquí Cómo usar File Choosers
Probablemente pueda hacer esto configurando su propio FileSystemView .