2012-08-26 13 views
7

Estoy intentando crear un directorio pero parece fallar todo el tiempo? He comprobado que no es un problema de permiso, tengo permiso completo para escribir en ese directorio. Gracias por adelantado.Java - mkdir() no está escribiendo el directorio

Aquí está el código:

private void writeTextFile(String v){ 
    try{ 

     String yearString = convertInteger(yearInt); 
     String monthString = convertInteger(month); 
     String fileName = refernce.getText(); 
     File fileDir = new File("C:\\Program Files\\Sure Important\\Report Cards\\" + yearString + "\\" + monthString); 
     File filePath = new File(fileDir + "\\"+ fileName + ".txt"); 
     writeDir(fileDir); 
     // Create file 
     FileWriter fstream = new FileWriter(filePath); 
     try (BufferedWriter out = new BufferedWriter(fstream)) { 
      out.write(v); 
     } 
    }catch (Exception e){//Catch exception if any 
    System.err.println("Error: " + e.getMessage()); 
    } 
} 

private void writeDir(File f){ 
    try{ 
     if(f.mkdir()) { 
      System.out.println("Directory Created"); 
     } else { 
     System.out.println("Directory is not created"); 
     } 
    } catch(Exception e){ 
     e.printStackTrace(); 
    } 
} 

public static String convertInteger(int i) { 
    return Integer.toString(i); 
} 

Calendar cal = new GregorianCalendar(); 
public int month = cal.get(Calendar.MONTH); 
public int yearInt = cal.get(Calendar.YEAR); 

Aquí está la salida:

Directory is not created 
Error: C:\Program Files\Sure Important\Report Cards\2012\7\4532.txt (The system cannot find the path specified) 

Respuesta

24

Es posiblemente porque File.mkdir crea el directorio sólo si existe el directorio padre. Intente usar File.mkdirs, que crea todos los directorios necesarios.

Aquí está el código que funcionó para mí.

private void writeDir(File f){ 
    try{ 
     if(f.mkdirs()) { 
      System.out.println("Directory Created"); 
     } else { 
     System.out.println("Directory is not created"); 
     } 
    } catch(Exception e){ 
      // Demo purposes only. Do NOT do this in real code. EVER. 
      // It squashes exceptions ... 
     e.printStackTrace(); 
    } 
} 

El único cambio que hice fue cambiar f.mkdir() a f.mkdirs() y funcionó

+0

Saludos que parece ser el problema, voy a aceptar la respuesta cuando me alows a :) ¡¡¡GRACIAS!!! – Nick

+1

Dado que la parte "dinámica" de la ruta de acceso tiene dos directorios, diría que esta teoría es bastante buena ... –

+1

Copié tu código, lo cambié a mkdirs() y funcionó. Edición para incluir el código relevante –

6

Creo que @La bla bla ha dado en el clavo, pero simplemente para la corrección, aquí están todas las cosas que puedo pensar en que podría causar una llamada a File.mkdir() a fallar:

  • un error de sintaxis en el nombre de ruta; p.ej. un carácter ilegal en un componente de nombre de archivo
  • El directorio para contener el componente de directorio final no existe.
  • Ya existe algo con ese nombre.
  • Usted no tiene permiso para crear un directorio en el directorio padre
  • Usted no tiene permiso para realizar una búsqueda en algún directorio en el camino
  • El directorio que se creará es en una de sólo lectura sistema de archivos.
  • El sistema de archivos produjo un error de hardware o un error relacionado con la red.

(Obviamente, algunas de estas posibilidades pueden ser eliminados rápidamente en el contexto de esta pregunta ...)

+0

ADVERTENCIA PARA WINDOWS7. Solo perdí horas descubriendo que si un nombre de archivo contiene alguna parte del directorio que es una de las palabras heredadas de Window7 (es decir: CON, PRN, AUX, CLOCK $, NUL, COM1-COM9, LPT1-LPT9 ... como todos sabíamos ... ¿no es así?) entonces los mkdirs fallarán sin advertencia o aparente explicación lógica. Encontrado bajo Java 7 b51 - no puede afectar otras versiones de Java u otros lenguajes de programación. No afecta el shell cmd de DOS. –

Cuestiones relacionadas