2013-08-22 15 views
6

Obecnie mam projekt w Javie utworzonej z następującą strukturę katalogów w Eclipse:Java uzyskanie plik jako zasób, kiedy to w folderze projektu

enter image description here

I w moim kodu mam następujące wiersze:

InputStream is = this.getClass().getClassLoader().getResourceAsStream("resources/config"); 
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(is)); 

jednak InputStream is zawsze zostaje przydzielony do null, która powoduje awarię, gdy dostaje się do drugiej linii. Wiem, że ma to coś wspólnego z tym, jak ustawić ścieżkę, której szuka, ale nie mogę dokładnie określić, dlaczego to nie działa.

+0

Złóż 'zasób s' folder źródłowy z Eclipse. –

+0

Kiedy wyeksportuję gotowy kod jako plik wykonywalny, spowoduje to problemy z Twoją sugestią? Zasadniczo chcę móc edytować tę konfigurację nawet po wyeksportowaniu jej jako pliku wykonywalnego. – user1806716

+1

@SotiriosDelimanolis następnie użyj 'InputStream jest = this.getClass()() getClassLoader getResourceAsStream ("/ config");..' :) – Katona

Odpowiedz

9

Twój plik config jest w twoim projekcie, gdzieś w systemie plików.

Jednak Eclipse nie umieszcza go w ścieżce klas. Aby wymusić umieszczenie go w ścieżce klas, kliknij prawym przyciskiem myszy folder i dodaj go jako folder źródłowy. Eclipse doda go następnie do katalogu głównego ścieżki klasy. Można pobrać go z

InputStream is = this.getClass().getResourceAsStream("/config"); 

Eclipse stawia wszystko w resources folderu źródłowego zaczynając od korzenia ścieżce klasy. Dlatego

resources/config

pojawi się w ścieżce klasy jako

/config 
/qbooksprintfix/FileChecker 
/qbooksprintfxi/FilePurgeHandler 
/... 
+0

. Więc nie mogę mieć zasobów src AND jako folderów źródłowych? oddzielając je byłby idealny, więc mogę edytować config łatwiejsze raz wyeksportować go. – user1806716

+0

@ user1806716 Możesz mieć oba (i więcej) jako foldery źródłowe. Jeśli nie chcesz, aby twój plik był w katalogu głównym, możesz zrobić drugi folder 'resources' w oryginalnym folderze' resources' jako '/ resources/resources/config'. Plik będzie wówczas dostępny jako 'getResourceAsStream ("/resources/config ")'. Nadal musisz uczynić oryginalny jeden folder 'source' na ścieżce Build Eclipse. Możesz spojrzeć na Mavena, ponieważ robi coś podobnego. –

+0

ustawić Resouces być folder src dla projektu i zmienił linię podałeś (teraz jej po prostu patrząc na „/ config”) i wciąż rzuca pustych wskaźników gdy dojdzie do linii BufferedReader =/ – user1806716

0

Try odrobina InputStream is = this.getClass().getClassLoader().getResource("/resources/config").openStream();

lub InputStream is = this.getClass().getClassLoader().getResourceAsStream("/resources/config");

W obu przypadkach upewnij się, aby umieścić "/" przed "zasobów"