Android - чтение txt файлов из внешнего jar

1

У меня есть jar, скомпилированный с базовым jdk.

Он содержит класс java, который читает txt файл. Он имеет тест, который доказывает, что этот класс работает правильно.

Если я включу эту банку в свой проект андроида, а затем вызовет класс java, который читает txt файл. Он не отвечает: java.io.FileNotFoundException и добавляет '/' к пути файла txt, который я хотел загрузить.

Является ли модель безопасности Android прекращением чтения файла txt?

Моя структура проекта:

Android-модуль:

src/Loader.java [вызывает GetName.java]

Модуль Java:

test/TestGetName.java [вызывает GetName.java]

SRC/GetName.java

ресурсы /names.txt

Резюме:

TestGetName.java работает

Ошибка Loader.java. Исключение FileNotFoundException выбрано внутри GetName

Теги:

3 ответа

1
Лучший ответ

Выяснил это в конце. Мне нужно условие, чтобы посмотреть, загружаю ли я файл локально или как ресурс. Возможно, есть более простой способ сделать это без использования условного.

    String source = "resources/inputfile.txt";
    BufferedReader fin;

    InputStream inputStream = getClass().getResourceAsStream(source.substring(source.lastIndexOf("/")));
    if (inputStream != null) {
        fin = new BufferedReader(new InputStreamReader(inputStream));
    } else {
        fin = new BufferedReader(new FileReader(new File(source)));
    }

Спасибо за подсказки о чтении как ресурсе user77777777

1

Кажется, Android не останавливает доступ к файлу, потому что исключение - FileNotFoundException. Вы должны проверить подробное сообщение, чтобы подтвердить это. Поймайте исключение и распечатайте подробное сообщение. Это даст вам лучшую идею. Также перепроверьте путь к файлу.

EDIT: попробуйте передать имя ресурса.

getClassLoader().getResource("names.txt");
  • 0
    подробное сообщение гласит: /resources/names.txt (Нет такого файла или каталога), но это не тот путь, который я предоставляю. Я предоставляю: resources / names.txt
  • 0
    где находится папка ресурсов? в каком каталоге? Предполагается, что папка ресурсов находится в корне.
Показать ещё 4 комментария
0

Я не знаю, почему, но принятый ответ не сработал для меня.

Система сборки: Gradle

Рабочая среда: Android Studio

Я также включил ресурсы из внешней банки. Но для того, чтобы использовать их, я должен был включить полный путь.

this.getClass().getResourceAsStream("/template/login.xml")

Надеюсь, это помогает кому-то и мешает ему тратить 3 часа, ударяя головой о стену, чтобы найти ответ.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню