2013-05-01 10 views
7

Mam następującą strukturę dla mojego projektu.Ścieżka pliku lub lokalizacja pliku dla języka Java - nowy plik()

w Eclipse:

myPorjectName 
    src 
    com.example.myproject 
     a.java 
    com.example.myproject.data 
     b.xml 

W a.java, chcę czytać b.xml pliku. Jak mogę to zrobić? W szczególności, w a.java używałem następujący kod:

DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance(); 
DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder(); 
Document doc = docBuilder.parse (new File("data/b.xml")); 

Kod ten nie może znaleźć b.xml. Jeśli jednak zmienię ścieżkę na src/com/example/myproject/data/b.xml, to działa. Obecna lokalizacja wydaje się znajdować w katalogu głównym mojego pliku projektu.

Ale widzę inne przykłady ludzi, jeśli b.xml i a.java są w tym samym folderze, a następnie możemy bezpośrednio korzystać new File("b.xml"). Ale próbuję wstawić b.xml w tym samym folderze z a.java, zamiast umieszczać w podfolderze, ale nadal nie działa. Jeśli to zadziała, to w moim przypadku powinienem móc użyć new File("data/b.xml"), prawda? Naprawdę nie rozumiem, dlaczego to nie działa.

+2

To najprawdopodobniej będzie bardziej jak 'getClass() getResourceAsInputStream ("/ com/example/myproject/data/b.xml");.' – MadProgrammer

+0

To nie działa z powodu swojej ** domyślnym katalogu (czyli java wykonuje z) ** jest 'myPorjectName' to nie jest w' myproject' – xagyg

+0

xagyg i komentarze MadProgrammer sprawiają, że rozumiem, dlaczego robiłem to źle. Dzięki chłopaki. Poniższa odpowiedź sprawia, że ​​uczę się czegoś więcej. – Joey

Odpowiedz

17

Jeśli jest już w ścieżce klasy i w tym samym opakowaniu, użyj

URL url = getClass().getResource("b.xml"); 
File file = new File(url.getPath()); 

OR, odczytać go jako InputStream:

InputStream input = getClass().getResourceAsStream("b.xml"); 

Wewnątrz metody static, można użyć

InputStream in = YourClass.class.getResourceAsStream("b.xml"); 

Jeśli Twój plik nie znajduje się w tym samym pakiecie, co klasa, do której próbujesz dołączyć ess pliku, musisz podać względną ścieżkę zaczynając od '/'.

ex : InputStream input = getClass().getResourceAsStream 
      ("/resources/somex.cfg.xml");which is in another jar resource folder 
+0

Myślę, że to najlepszy sposób! – buch11

+0

co, jeśli nie znajduje się w tym samym pakiecie? w moim przykładzie a.java znajduje się w com.example.myproject. b.xml znajduje się w com.example.myproject.data. – Joey

+1

Edytowałem odpowiedź. – NINCOMPOOP

Powiązane problemy