2012-03-11 16 views
16

Voglio creare un file in una nuova directory utilizzando il percorso relativo. Creare la directory "tmp" è abbastanza facile.Java - Come creare un file in una directory utilizzando il relativo percorso

Tuttavia, quando creo il file, si trova nella directory corrente e non in quello nuovo. La riga di codice è sotto.

File tempfile = new File("tempfile.txt"); 

hanno provato anche questo:

File tempfile = new File("\\user.dir\\tmp\\tempfile.txt"); 

Chiaramente che sto fraintendendo come funziona questo metodo. La tua assistenza è molto apprezzata.

MODIFICA: aggiunta la riga di codice attualmente utilizzata e quella che, a mio parere, potrebbe funzionare per un percorso relativo per chiarire la confusione.

+1

Il codice sopra riportato utilizza un percorso assoluto: '\ utente.dir \ tmp \ tempfile.txt'. Non vedo come questo file possa essere creato nella directory corrente. Pubblica il codice pertinente, spiegaci cosa ti aspetti che faccia e cosa invece fa. –

+1

* ".. utilizzando il percorso relativo." * Rispetto a cosa? L'applicazione? Il pacchetto della classe? L'osservatore relativistico? Nota che a) Questo è un costruttore, non un metodo. b) 'user.dir' non verrà automaticamente espanso. c) La programmazione con la magia funziona raramente, prova a leggere la documentazione. –

risposta

23
File dir = new File("tmp/test"); 
dir.mkdirs(); 
File tmp = new File(dir, "tmp.txt"); 
tmp.createNewFile(); 

BTW: Per l'uso di test @Rule e la classe temporaryFolder per creare file temporanei o cartelle

+0

Questo l'ha fatto! Grazie, ci sarebbero voluti un paio d'ore per capire che avevo bisogno di due nuove istruzioni File separate. –

+3

Proprio come un avviso (potrebbe non saperlo) ma Sun, er Oracle, ha un'ottima documentazione API. Una volta che impari a comprenderli e a navigarli, possono essere un enorme risparmio di tempo. Ad esempio, la soluzione al tuo problema specifico avrebbe potuto essere compresa se avessi esaminato i vari costruttori disponibili per gli utenti della classe File: http://docs.oracle.com/JavaSE/6/docs/api/java/io/file.html – claymore1977

4

È possibile creare percorsi relativi a una directory con i costruttori che prendono due argomenti: http://docs.oracle.com/javase/6/docs/api/java/io/File.html

Ad esempio:

File tempfile = new File("user.dir/tmp", "tempfile.txt"); 

Tra l'altro, il backslash "\" può essere utilizzato solo su Windows . In quasi tutti i casi è possibile utilizzare la barra diretta "/".

+5

Cosa è successo a "File.separator'? – Manish

+1

* "In quasi tutti i casi dovresti usare la barra diretta portatile" /"."* In *** ogni *** caso dovresti usare il costruttore 'File' che accetta un' File' (parent) & 'String '(nome file) o usare' System.getProperty ("file.separator") '. –

+0

@Manish Dovrebbe essere tutto in minuscolo. –

2
String routePath = this.getClass().getClassLoader().getResource(File.separator).getPath(); 
System.out.println(routePath); 

/*for finding the path*/ 
String newLine = System.getProperty("line.separator"); 
BufferedWriter bw = new BufferedWriter(new FileWriter(new File(routePath+File.separator+".."+File.separator+"backup.txt"), true)); 
/*file name is backup.txt and this is working.*/ 
0

Diciamo che avete "Local-Storage" sulla vostra cartella del progetto e si vuole mettere un testo o qualsiasi altro file che utilizza il file scrivere.

File file = new File(dir,fileName); //KEY IS DIR ex."./local-storage/" and fileName='comp.html' 

     // if file doesnt exists, then create it 
     if (! file.exists()) 
     { 
      file.createNewFile(); 
     } 

     FileWriter fw = new FileWriter(file.getAbsoluteFile()); 
     BufferedWriter bw = new BufferedWriter(fw); 
     bw.write(text); 
Problemi correlati