getResourceAsStream() возвращает ноль
У меня есть библиотека Java.jar, и оттуда я пытаюсь получить доступ к файлу моего проекта Android с помощью:
InputStream inputStream = getClass().getResourceAsStream("/folder/data.txt");
someMethod(inputStream); // inputStream is null
Но inputStream
всегда null
, Я не понимаю, куда мне положить /folder/data.txt
чтобы можно было найти его из.jar.
В проекте.jar я могу найти data.txt, выполнив в eclipse следующее:
MyProject > properties > java build path > libraries > Add class folder
и этот код:
InputStream inputStream = getClass().getResourceAsStream("/data.txt"); // without the folder
Это структура проекта Java:
MyJavaProject
- src
- com.example
- something.java
- folder
- data.txt
Теперь внутри Android Project я пытаюсь сделать то же самое, но продолжаю получать значение null (inputStream):
MyAndroidProject
- src
- several packages
- folder
- data.txt
- libs
- my jar
Где я должен положить свой data.txt? или я должен что-то изменить в моем.jar
Я прочитал много похожих вопросов, но я не нашел решения. Я также читал о getResourceAsStream()
но я, очевидно, не понимаю.
2 ответа
getResourceAsStream()
не очень полезно в Android. Это относится к файлам, встроенным в JAR или контейнер classpath, а не к ресурсам Android. Вы, вероятно, хотите использовать Android assets
особенность вместо Вы можете просто разместить файл актива ("data.txt"
) под ваш проект assets/
каталог.
Чтобы получить InputStream
для актива вы можете использовать AssetsManager
, вот так (обработка ошибок для ясности опущена:
// get the assets manager from your activity or `Context`
final AssetsManager am = getAssets();
final InputStream in = am.open("data.txt");
// do stuff with the input stream
Другой подход заключается в использовании Resources
вместо этого, но это зависит от содержания data.txt
Ресурсы предназначены для типов данных, которые Android знает, как загружать и анализировать, например, для рисования, строк и различных XML-файлов. Активы предназначены для необработанных данных, которые вы собираетесь читать и анализировать самостоятельно.
Resouses in android означает drawables, values .. и т.д. папки.
Для текстового файла создайте папку с именем raw и поместите туда свой файл данных.
Попробуйте отправить путь к методу библиотеки как data.txt, а затем как raw/data.txt