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 restrinjo JFileChooser a un directorio?
¿Cómo debo hacer eso?
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 restrinjo JFileChooser a un directorio?
¿Cómo debo hacer eso?
Probablemente pueda hacer esto configurando su propio FileSystemView.
En caso que nadie más lo necesita 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 va necesitan hacer un mejor método "createNewFolder", pero esto no restringir al usuario a uno o más directorios.
y utilizarlo como esto:
FileSystemView fsv = new DirectoryRestrictedFileSystemView(new File("X:\\"));
JFileChooser fileChooser = new JFileChooser(fsv);
o como esto:
FileSystemView fsv = new DirectoryRestrictedFileSystemView(new File[] {
new File("X:\\"),
new File("Y:\\")
});
JFileChooser fileChooser = new JFileChooser(fsv);
No funciona @Allain –
La solución de Allain es casi completa. Tres problemas están abiertas para resolver:
public TFile getHomeDirectory() { return rootDirectories[0]; }
clase set y constructor public
Cambio 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 es necesario que sea tan complicado. Puede configurar fácilmente el modo de selección de un JFileChooser como esto
JFileChooser fc = new JFileChooser();
fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
fc.setMultiSelectionEnabled(false);
Puede leer más aquí referencia How to Use File Choosers
Esto los limita a los directorios en general, pero no a un directorio específico, que es la pregunta del OP. –
¿cómo se consigue la filesystemview por defecto (por ejemplo, delegar en ella)? –
@Jason S - probablemente a través del método estático 'getFileSystemView()' – McDowell
Solo si alguien pudiera necesitarlo, aquí hay un ejemplo exacto de lo que OP quería: http://tips4java.wordpress.com/2009/01/28/single -root-file-chooser/ –