2012-05-17 11 views
5

Próbuję odczytać pliku w Java:Gdzie java szuka plików?

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) Gdzie należy położenie "test.in" be? (src? bin? ???)

2) Gdzie znajduje się "test.out"?

+0

Jak wykonujesz swój kod? Z linii poleceń lub z jakiegoś miejsca jak zaćmienie? –

+0

Sądząc po tym, że pytasz o src i bin, zakładam, że używasz jakiegoś SDK? W przeciwnym razie odpowiedź jest banalna; lokalizacja będzie tą samą lokalizacją, w której wykonujesz swój plik java. Podaj trochę więcej informacji o pakiecie SDK, z którego korzystasz, i komuś lepiej odpowiedzieć. – NominSim

+3

"Gdzie Java szuka plików?" Dlaczego nie zapytać samej Javy: 'System.out.println (System.getProperty (" user.dir "));' Edytuj: 1+ do @mebigfatguy, ponieważ teraz widzę, że dał mi tę samą sugestię. –

Odpowiedz

2

Zazwyczaj jest to dokładna lokalizacja, w której wykonywany jest plik Java. Więc jeśli użyjesz pliku Java w C: \ i szukasz pliku bez określenia ścieżki, będzie on w C: \, który wygląda, a plik wyjściowy będzie również w C: \

Jeśli używają czegoś takiego jak Netbeans, ale musisz po prostu umieścić plik w folderze projektu netbeans swojego projektu. Nie w folderach źródłowych ani bin projektu.

+1

Jest to prawdą tylko wtedy, gdy bieżący katalog roboczy również jest taki sam, jak katalog zawierający "plik java" (co do którego zakładam, że mówimy o plikach .class i .jar). – rob

+0

Śmieszne to taki sam wynik, jaki otrzymuję za każdym razem. – OmniOwl

+1

Zaktualizowałem swój komentarz. Jeśli twoje pliki klas lub pliki JAR znajdują się w 'C: \ java' i twoim bieżącym katalogu roboczym (który możesz zobaczyć używając' System.out.println (System.getProperty ("user.dir")); ') to' C : \ run' po uruchomieniu programu, będzie szukał plików w 'C: \ run'. – rob

8

Względny plik path'ed jest poszukiwany w katalogu określonym przez System.getProperty („user.dir”)

+0

Dziękujemy! Dziękuję Ci! Dziękuję Ci! – JohnK

3

Odpowiedź jest folder pracy, co oznacza, że ​​folder, w którym wykonywane na „Java ..." dowództwo. Jest to na przykład folder projektu w projektach zaćmieniowych.

1

ja prawdopodobnie spędził zbyt długo na to pytanie, ale:

C:\temp>notepad test_in.txt => 

wejście Witam Java!

w tym samym katalogu, tworzyć "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"; 
} 

Wreszcie, uruchom go - podać pełną nazwę pakietu:

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 

„Hope, który pomaga wyjaśnić kilka rzeczy, w tym:

  • Twój „domyślny katalog” w odniesieniu do sporządzania i prowadzenia

  • Jak „pakiety” odnoszą się do „katalogi”

  • faktu, że Java będzie umieścić swoje pliki klas w katalogu pakietu (niekoniecznie katalog roboczy)

1

Eclipse szuka pliku dokładnie w folderze głównym projektu (folder nazwa projektu). Więc możesz mieć src/test.in do zlokalizowania pliku wewnątrz folderu src projektu.

Powiązane problemy