W aplikacji internetowej Java, załóżmy, że jeśli chcę pobrać InputStream pliku XML, który jest umieszczony w CLASSPATH (tj. W folderze źródeł ), jak mam to zrobić?
java
file-io
inputstream
Veera
źródło
źródło
InputStream is = new ClassPathResource("/path/to/your/file").getInputStream()
ClassLoader.class.getResourceAsStream("/path/file.ext");
źródło
java.lang.NullPointerException: null
i najprostszym sposobem wydaje mi sięnew ClassPathResource("/path/to/your/file").getInputStream()
To zależy od tego, gdzie dokładnie znajduje się plik XML. Czy znajduje się w folderze źródeł (w „pakiecie domyślnym” lub „głównym”), czy w tym samym folderze co klasa?
W pierwszym przypadku musisz użyć "
/file.xml
" (zwróć uwagę na początkowy ukośnik), aby znaleźć plik i nie ma znaczenia, której klasy użyjesz do zlokalizowania go.Jeśli plik XML znajduje się obok jakiejś klasy,
SomeClass.class.getResourceAsStream()
wystarczy podać nazwę pliku.źródło
ClassLoader.class.getResourceAsStream("/path/to/your/xml")
i upewnij się, że skrypt kompilujący kopiuje plik xml do odpowiedniego miejsca w Twojej CLASSPATH.źródło
someClassWithinYourSourceDir.getClass (). getResourceAsStream ();
źródło
getClass().getResourceAsStream("...")
itp.Niektóre z opcji „getResourceAsStream ()” w tej odpowiedzi nie działały w moim przypadku, ale ta:
SomeClassWithinYourSourceDir.class.getClassLoader (). GetResourceAsStream ("yourResource");
źródło
Wypróbowałem proponowane rozwiązanie i ukośnik w nazwie pliku nie zadziałał, na przykład: ... (). GetResourceAsStream ("/ my.properties"); null został zwrócony
Usunięcie ukośnika zadziałało: .... getResourceAsStream ("my.properties");
Tutaj jest z doc API: Przed delegacją, bezwzględna nazwa zasobu jest konstruowana z podanej nazwy zasobu przy użyciu tego algorytmu:
If the name begins with a '/' ('\u002f'), then the absolute name of the resource is the portion of the name following the '/'. Otherwise, the absolute name is of the following form: modified_package_name/name Where the modified_package_name is the package name of this object with '/' substituted for '.' ('\u002e').
źródło
null
bez/
. Dodanie znaku ukośnego działało dla mnie. Musi istnieć jakaś inna różnica między @ hussein-terek a moją konfiguracją i twoją konfiguracją.