2012-05-17 14 views
5

Sto cercando di leggere un file in java:Dove cerca i file java?

Public class Test{ 

public static void main (String [] args) throws IOException { 

BufferedReader f = new BufferedReader(new FileReader("test.in")); 

//... 

PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("test.out"))); 

//...         

} 

} 

1) Dove dovrebbe la posizione di "test.in" essere? (src? bin? ???)

2) Dove si troverà "test.out"?

+0

Come stai eseguendo il tuo codice? Dalla riga di comando o da qualche parte come eclissi? –

+0

A giudicare dal fatto che tu stia chiedendo di src e bin, suppongo tu stia usando una specie di SDK? Altrimenti la risposta è banale; la posizione sarà la stessa posizione in cui si esegue il file java. Fornisci un po 'più di informazioni su quale SDK stai utilizzando e qualcuno può rispondere meglio. – NominSim

+3

"Dove cerca i file Java?" Perché non chiedere a Java stesso: 'System.out.println (System.getProperty (" user.dir "));' Modifica: da 1+ a @mebigfatguy, come ora vedo che ha dato lo stesso suggerimento prima di me. –

risposta

2

Di solito è la posizione esatta in cui si trova il file Java che si sta eseguendo. Quindi se usi il tuo file Java in C: \ e cerchi un file senza specificare un percorso, sarà in C: \ che sembra, e il file di output sarà anche in C: \

Se tu si sta utilizzando qualcosa come Netbeans, tuttavia, è sufficiente posizionare il file nella cartella del progetto netbeans del progetto specifico. Non nelle cartelle di origine o bin del tuo progetto.

+1

Questo è vero solo se la directory di lavoro corrente è uguale alla directory contenente il "file java" (con cui presumo stiamo parlando di file .class e .jar). – rob

+0

Divertente è lo stesso risultato che ottengo ogni volta allora. – OmniOwl

+1

Ho aggiornato il mio commento. Se i tuoi file di classe o jarfile sono in 'C: \ java' e la tua directory di lavoro corrente (che puoi vedere usando' System.out.println (System.getProperty ("user.dir")); ') è' C : \ run' quando avvii il programma, cercherà i file in 'C: \ run'. – rob

8

Un file path'ed relativa è alla ricerca all'interno della directory specificata da System.getProperty ("user.dir")

+0

Grazie! Grazie! Grazie! – JohnK

3

La risposta è la cartella di lavoro, il che significa che la cartella in cui avete eseguito il "java ... "comando. Questa è la cartella del progetto nei progetti di Eclipse, per esempio.

1

Probabilmente ho speso troppo tempo su questa questione, ma:

C:\temp>notepad test_in.txt => 

ingresso Ciao Java!

Nella stessa directory, creare "Test.java":

package com.mytest; 

import java.io.*; 

public class Test { 

    public static void main (String [] args) throws IOException { 
    System.out.println ("Current directory is " + new File(".").getAbsolutePath()); 

    System.out.println ("Reading file " + INPUT_FILE + "..."); 
    BufferedReader fis = 
     new BufferedReader(new FileReader(INPUT_FILE)); 
    String s = fis.readLine(); 
    fis.close(); 
    System.out.println ("Contents: " + s + "."); 

    System.out.println ("Writing file " + INPUT_FILE + "..."); 
    PrintWriter fos = 
     new PrintWriter(new BufferedWriter(new FileWriter("test_out.txt"))); 
    fos.println ("Hello Java output"); 
    fos.close(); 
    System.out.println ("Done."); 
    } 

    private static final String INPUT_FILE = "test_in.txt"; 
    private static final String OUTPUT_FILE = "test_out.txt"; 
} 

Infine, eseguirlo - specificare il nome del pacchetto completo:

C:\temp>javac -d . Test.java 

C:\temp>dir com\mytest 
Volume in drive C has no label. 
Volume Serial Number is 7096-6FDD 

Directory of C:\temp\com\mytest 

05/17/2012 02:23 PM <DIR>   . 
05/17/2012 02:23 PM <DIR>   .. 
05/17/2012 02:29 PM    1,375 Test.class 
       1 File(s)   1,375 bytes 
       2 Dir(s) 396,478,521,344 bytes free 

C:\temp>java com.mytest.Test 
Current directory is C:\temp\. 
Reading file test_in.txt... 
Contents: Hello Java input!. 
Writing file test_in.txt... 
Done. 

C:\temp>dir/od test*.txt 
Volume in drive C has no label. 
Volume Serial Number is 7096-6FDD 

Directory of C:\temp 

05/17/2012 02:24 PM    17 test_in.txt 
05/17/2012 02:29 PM    19 test_out.txt 
       2 File(s)    36 bytes 

'Speranza che aiuta a spiegare un paio di cose, tra cui:

  • vostro "directory di default" per quanto riguarda la compilazione e l'esecuzione

  • Come "pacchetti" sono relativi a "directory"

  • Il fatto che Java metterà i file di classe nella directory del pacchetto (non necessariamente la directory di lavoro)

1

Eclipse cerca il file esattamente nella cartella radice del progetto (cartella del nome del progetto). Così puoi avere src/test.in per localizzare il file nella cartella src del progetto.