Mi pequeña aplicación de utilidad le pide al usuario un directorio de salida a través de un selector de archivo GUI. Luego crea una gran cantidad de archivos en este directorio de salida después de algún procesamiento.Verificar el acceso de escritura en un directorio antes de crear archivos dentro de él
tengo que comprobar si la aplicación tiene acceso de escritura para que se informa al usuario y no no continuar con el tratamiento (que puede llevar mucho tiempo)
Mi primer intento fue el CanWrite() método de java.io.File. Pero esto no funciona ya que se trata de la entrada del directorio en sí y no de su contenido. He visto al menos una instancia de una carpeta de Windows XP que puede renombrarse o eliminarse, pero no se pueden crear archivos en ella (debido a los permisos). Este es en realidad mi caso de prueba.
finalmente se establecieron con la siguiente solución
//User places the input file in a directory and selects it from the GUI
//All output files will be created in the directory that contains the input file
File fileBrowse = chooser.getSelectedFile(); //chooser is a JFileChooser
File sample = new File(fileBrowse.getParent(),"empty.txt");
try
{
/*
* Create and delete a dummy file in order to check file permissions. Maybe
* there is a safer way for this check.
*/
sample.createNewFile();
sample.delete();
}
catch(IOException e)
{
//Error message shown to user. Operation is aborted
}
Sin embargo esto no se siente elegante para mí ya que sólo trata de crear realmente un archivo y comprueba si la operación tiene éxito.
Sospecho que debe haber una mejor manera para esto, pero todas las soluciones que he encontrado hasta el momento con los administradores de seguridad y otras cosas se refieren a los applets de Java y no a las aplicaciones independientes. ¿Me estoy perdiendo algo?
¿Cuál es la forma recomendada de verificar el acceso a archivos dentro de un directorio antes de realmente escribir los archivos?
estoy usando Java 5.
¿Qué pasa si "empty.txt" ya existe? Luego terminas borrando un archivo que puede haber sido importante. –
Sí, sería mejor si se usara el booleano devuelto por createNewFile() para entender si el archivo realmente se creó de no. – kazanaki