У меня есть 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
Выяснил это в конце. Мне нужно условие, чтобы посмотреть, загружаю ли я файл локально или как ресурс. Возможно, есть более простой способ сделать это без использования условного.
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
Кажется, Android не останавливает доступ к файлу, потому что исключение - FileNotFoundException
. Вы должны проверить подробное сообщение, чтобы подтвердить это. Поймайте исключение и распечатайте подробное сообщение. Это даст вам лучшую идею. Также перепроверьте путь к файлу.
EDIT: попробуйте передать имя ресурса.
getClassLoader().getResource("names.txt");
Я не знаю, почему, но принятый ответ не сработал для меня.
Система сборки: Gradle
Рабочая среда: Android Studio
Я также включил ресурсы из внешней банки. Но для того, чтобы использовать их, я должен был включить полный путь.
this.getClass().getResourceAsStream("/template/login.xml")
Надеюсь, это помогает кому-то и мешает ему тратить 3 часа, ударяя головой о стену, чтобы найти ответ.