2012-08-26 13 views
7

Sto provando a creare una directory ma sembra fallire ogni volta? Ho verificato che non si tratta di un problema di autorizzazione, ho il pieno permesso di scrivere in quella directory. Grazie in anticipo.Java - mkdir() non scrive la directory

Ecco il codice:

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); 

Ecco l'output:

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

risposta

24

E 'forse perché File.mkdir crea la directory solo se esiste la directory padre. Provare a utilizzare File.mkdirs che crea tutte le directory necessarie.

Ecco il codice che ha funzionato per me.

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(); 
    } 
} 

L'unico cambiamento che ho fatto è stato quello di cambiare f.mkdir() per f.mkdirs() e ha funzionato

+0

acclamazioni che sembra essere il problema, accetterò la risposta quando mi alows a :) GRAZIE!!! – Nick

+1

Poiché la parte "dinamica" del percorso ha due directory, direi che questa teoria è abbastanza buona ... –

+1

Ho copiato il tuo codice, l'ho cambiato in mkdirs() e ha funzionato. Modifica per includere il codice rilevante –

6

Penso che @La bla bla ha inchiodato, ma solo per completezza, qui ci sono tutte le cose che posso pensare che potrebbe causare una chiamata a File.mkdir() a fallire:

  • un errore di sintassi nel nome del percorso; per esempio. un carattere non valido in un componente nome file
  • La directory per contenere il componente di directory finale non esiste.
  • C'è già qualcosa con quel nome.
  • Non hai il permesso di creare una directory nella directory padre
  • Non hai il permesso di fare una ricerca in una directory sul percorso
  • La directory da creare è in una sola lettura file system.
  • Il file system ha generato un errore hardware o un errore relativo alla rete.

(Ovviamente, alcune di queste possibilità possono essere rapidamente eliminati nel contesto di questa domanda ...)

+0

AVVISO PER WINDOWS7. Ho appena perso ore a scoprire che se un nome di file contiene una parte di directory che è una delle parole legacy di Window7 (ovvero: CON, PRN, AUX, CLOCK $, NUL, COM1-COM9, LPT1-LPT9 ... come tutti sapevamo ... non è vero?) allora gli mkdir falliranno senza preavviso o apparente spiegazione logica. Trovato sotto Java 7 b51 - potrebbe non interessare altre versioni di Java o altri linguaggi di programmazione. Non ha effetto sulla shell cmd di DOS. –