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

Другие вопросы по тегам