Mam następujący kod próbujący odczytać plik właściwości:
Properties prop = new Properties();
ClassLoader loader = Thread.currentThread().getContextClassLoader();
InputStream stream = loader.getResourceAsStream("myProp.properties");
prop.load(stream);
W ostatnim wierszu dostaję wyjątek. Konkretnie:
Exception in thread "main" java.lang.NullPointerException
at java.util.Properties$LineReader.readLine(Properties.java:418)
at java.util.Properties.load0(Properties.java:337)
at java.util.Properties.load(Properties.java:325)
at Assignment1.BaseStation.readPropertyFile(BaseStation.java:46)
at Assignment1.BaseStation.main(BaseStation.java:87)
dzięki, Nikos
java
properties
nikos
źródło
źródło
getResourceAsStream
wyszukuje plik w ścieżce klas. Jeśli plik właściwości znajduje się w katalogu pakietumyPackage
, użyj/myPackage/myProp.properties
jako ścieżki.conf
pakiet do przechowywania wszystkich moich plików konfiguracyjnych, a moja hierarchia plików to :,myproject ->src, conf, test
jak mam załadować właściwości, dodając poprzedzający ukośnik?Informacje można znaleźć na tej stronie:
http://www.mkyong.com/java/java-properties-file-examples/
źródło
Reader
inprop.load(reader)
, zgodnie z dokumentacją:The specified stream remains open after this method returns
Możesz użyć
ResourceBundle
class do odczytania pliku właściwości.źródło
conf/filename.properties
na podstawie projektu root reżźródło
Nie możesz użyć tego słowa kluczowego, takiego jak -
w kontekście statycznym.
Najlepiej byłoby poznać kontekst aplikacji, taki jak -
wtedy możesz załadować plik zasobów ze ścieżki klas -
Będzie to działać zarówno w kontekście statycznym, jak i niestatycznym, a najlepsze jest to, że ten plik właściwości może znajdować się w dowolnym pakiecie / folderze zawartym w ścieżce klas aplikacji.
źródło
Twój plik powinien być dostępny tak jak
com/example/foo/myProps.properties
w ścieżce klas. Następnie załaduj go jako:źródło
jeśli twojej config.properties nie ma w katalogu src / main / resource i znajduje się w katalogu głównym projektu, musisz zrobić coś takiego jak poniżej: -
źródło
Upewnij się, że nazwa pliku jest poprawna i że plik faktycznie znajduje się w ścieżce klasy.
getResourceAsStream()
zwróci wartość null, jeśli tak nie jest, co powoduje, że ostatni wiersz zgłasza wyjątek.Jeśli myProp.properties znajduje się w katalogu głównym projektu, użyj
/myProp.properties
zamiast tego.źródło
Możesz użyć java.io.InputStream do odczytania pliku, jak pokazano poniżej:
źródło
Biorąc pod uwagę kontekst,
loader.getResourceAsStream("myPackage/myProp.properties")
należy użyć.Prowadzenie
'/'
nie działa zClassLoader.getResourceAsStream(String)
metodą.Alternatywnie możesz użyć
Class.getResourceAsStream(String)
metody, która używa'/'
do określenia, czy ścieżka jest bezwzględna, czy względna w stosunku do lokalizacji klasy.Przykłady:
źródło
Jeśli ścieżka do pliku właściwości i ścieżka do klasy java są takie same, należy to zrobić.
Na przykład:
źródło
Żadna z bieżących odpowiedzi nie wskazuje na
InputStream
zamknięcie (spowoduje to wyciek deskryptora pliku) i / lub nie zajmie się.getResourceAsStream()
zwracaniem wartości null, gdy zasób nie zostanie znaleziony (doprowadzi to do aNullPointerException
z mylącą wiadomością"inStream parameter is null"
). Potrzebujesz czegoś takiego:źródło
Aby odczytać plik właściwości w oryginalnej kolejności:
źródło
Wiele odpowiedzi tutaj opisuje niebezpieczne metody, w których tworzą one instancję strumienia wejściowego pliku, ale nie uzyskują odniesienia do strumienia wejściowego w celu późniejszego zamknięcia strumienia. Powoduje to zawieszanie się strumieni wejściowych i wycieki pamięci. Prawidłowy sposób wczytywania właściwości powinien być podobny do następującego:
Zwróć uwagę na tworzenie instancji strumienia wejściowego pliku w
try-with-resources
bloku. Ponieważ aFileInputStream
można automatycznie zamykać, zostanie automatycznie zamknięty potry-with-resources
wyjściu z bloku. Jeśli chcesz użyć prostegotry
bloku, musisz go jawnie zamknąć za pomocąfis.close();
wfinally
bloku.źródło
Widzę, że to stare pytanie. Jeśli ktoś się na to natknie w przyszłości, myślę, że jest to prosty sposób na zrobienie tego. Zachowaj plik właściwości w folderze projektu.
źródło
Określ ścieżkę zaczynającą się od src, jak poniżej:
źródło