Припустимо, у веб-програмі Java, якщо я хочу отримати InputStream XML-файлу, який розміщений у CLASSPATH (тобто всередині папки джерел ), як мені це зробити?
Відповіді:
ClassLoader.getResourceAsStream()
.
Як зазначено в коментарі нижче, якщо ви перебуваєте в мультисередовищі ClassLoader
(наприклад, модульне тестування, веб-додатки тощо), вам може знадобитися використовувати Thread.currentThread().getContextClassLoader()
. Див. Http://stackoverflow.com/questions/2308188/getresourceasstream-vs-fileinputstream/2308388#comment21307593_2308388 .
InputStream is = new ClassPathResource("/path/to/your/file").getInputStream()
ClassLoader.class.getResourceAsStream("/path/file.ext");
java.lang.NullPointerException: null
і найпростіший спосіб, на мою думку,new ClassPathResource("/path/to/your/file").getInputStream()
Це залежить від того, де саме знаходиться файл XML. Він знаходиться в папці джерел (у "пакунку за замовчуванням" або "кореневому") або в тій же папці, що і клас?
У попередньому випадку ви повинні використовувати "/file.xml
" (зверніть увагу на косу риску), щоб знайти файл, і не має значення, який клас ви використовуєте, щоб спробувати його знайти.
Якщо XML-файл знаходиться поруч із класом, слід SomeClass.class.getResourceAsStream()
лише вказати ім’я файлу.
someClassWithinYourSourceDir.getClass (). getResourceAsStream ();
getClass().getResourceAsStream("...")
ін.
Деякі з параметрів "getResourceAsStream ()" у цій відповіді не працювали для мене, але цей:
SomeClassWithinYourSourceDir.class.getClassLoader (). GetResourceAsStream ("yourResource");
Я спробував запропоноване рішення, і коса риска в назві файлу у мене не спрацювала, наприклад: ... (). GetResourceAsStream ("/ my.properties"); null було повернуто
Видалення косої риси спрацювало: .... getResourceAsStream ("my.properties");
Ось з doc API: Перед делегуванням з даного імені ресурсу будується абсолютна назва ресурсу за допомогою цього алгоритму:
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').
null
без/
. Додавання символу косої риси мені вдалося. Має бути якась інша різниця між @ hussein-terek та моїм налаштуванням та вашим налаштуванням.