read - mkdirs java
File.mkdir o mkdirs devuelven false-¿Motivo? (3)
Si la seguridad / los permisos son una razón, ¿por qué no se lanza SecurityException (que se menciona en javadoc)?
Se SecurityException
una SecurityException
cuando no tiene permiso de JVM para hacer algo, no nivel de SO
¿Hay alguna forma de encontrar la razón exacta por la que se devuelve false?
No, AFAIK. La única forma de saber sería verificar los permisos en el directorio, asegurarse de que no existe antes de llamarlos, verificar si existe el directorio principal, etc.
Sin embargo, si está utilizando Java 7 o superior , puede usar NIO en su lugar para crear el directorio. Específicamente, Files.createDirectory
:
File dir = new File("mydir");
Files.createDirectory(dir.toPath());
Si desea utilizar NIO completamente con el uso de java.io.File
, puede usar Paths.get
para crear una Path
lugar:
Path dir = Paths.get("mydir");
Files.createDirectory(dir);
En ambos casos, si no se puede crear el directorio, se emitirá una IOException
con una razón exacta por la que falló la operación.
Esto es cierto para la mayoría de los métodos en Files
, por lo que se recomienda su uso en lugar de usar los métodos en la clase File
.
¿Por qué file.mkdir está devolviendo falso?
Google indica que puede haber varias razones (por ejemplo, seguridad, permisos, nombre de ruta, etc.).
Mis preguntas:
- ¿Cómo encontrar la razón exacta de la devolución falsa?
- Si la seguridad / permisos es una razón, entonces ¿por qué no se lanza SecurityException?
No, no hay manera de encontrar la razón exacta por la que
mkdirs()
devuelve false, al menos no desde Java, ya que probablemente sea dependiente del sistema operativo.Se
checkRead()
unacheckRead()
seguridad si hay una infracción de seguridad en loscheckRead()
ycheckWrite()
. La excepción no se produce si hay un problema de permisos del sistema operativo.
Además, tenga en cuenta que si llama a File.mkdir()
y el directorio principal no existe, mkdir()
devolverá false. Sin embargo, al llamar a File.mkdirs()
se crearán los directorios primarios que no existen.
mkdir y mkdirs devuelven false si el directorio ya existe, por lo que podría ser una de las razones del error.
Si está utilizando Java 7, puede usar la clase Archivos. Lanza una excepción IOException por error con descripciones bastante buenas.
Files.createDirectory(file.toPath());