Студия android «файл не найден» при использовании adb, версия для пк работает

Всякий раз, когда я пытаюсь запустить приложение libdgx на своем телефоне через ADB, студия Android не может найти файл в папке «android / assets». Однако, когда я запускаю настольную версию, она работает нормально.

Я использую это для чтения из файла:

File file = new File("BlocksProgression.txt");
reader = new BufferedReader(new FileReader(file));

Как объяснялось, это отлично работает, когда я запускаю программу запуска рабочего стола, но программа запуска Android возвращает эту ошибку:

W/System.err: java.io.FileNotFoundException: BlocksProgression.txt (No such file or directory)

Я искал уже более часа, но не могу найти, как правильно настроить папку с ресурсами.

Любая помощь будет оценена по достоинству.

перекрестная проверка имени файла, Android file-system is case sensitive.

Abhishek Aryan 11.08.2018 06:13
1
1
113
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Что ж, при использовании File file = new File("BlocksProgression.txt") вы читаете не из ресурсов, а из каталога файлов по умолчанию, правильным способом чтения файла из ресурсов будет следующий

BufferedReader reader = null;
try {
    reader = new BufferedReader(
        new InputStreamReader(getAssets().open("BlocksProgression.txt"), "UTF-8")); 

    // do reading, usually loop until end of file reading 
    String mLine;
    while ((mLine = reader.readLine()) != null) {
       //process line
       ...
    }
} catch (IOException e) {
    //log the exception
} finally {
    if (reader != null) {
         try {
             reader.close();
         } catch (IOException e) {
             //log the exception
         }
    }
}

Этот код был из этого отвечать

Спасибо за ответ, я так понимаю, что читаю не из папки с ресурсами. Когда я пытаюсь вызвать getAssets, он не может разрешить метод, потому что он не в этом классе, однако я не знаю, в каком он классе, нужно ли мне расширять какой-то класс, чтобы я мог вызвать getAssets. Какой класс содержит функцию getAssets? Спасибо

Jack Jhonsen 11.08.2018 18:42

Обновлено: Итак, я обнаружил, что getAssets можно вызывать только в действии, в противном случае я должен использовать статический класс ContextInstance, однако я не могу найти этот класс для импорта. Также я не могу расширить «Активность» (тоже не найден), возможно, мой проект настроен неправильно.

Jack Jhonsen 11.08.2018 18:54

Может попробовать этот импорт, import android.app.Activity;

Pedro Cavaleiro 11.08.2018 20:07

Хм, это не работает, но я нашел проблему. Я отправлю его как ответ другим людям с той же проблемой. В любом случае спасибо за вашу помощь!

Jack Jhonsen 11.08.2018 20:17
Ответ принят как подходящий

Нашел ответ: https://github.com/libgdx/libgdx/wiki/File-handling#reading-from-a-file

Оказывается, Libgdx хочет, чтобы вы использовали объект FileHandle для чтения файла. Используя этот мой код, становится:

FileHandle file = Gdx.files.internal("BlocksProgression.txt");
String data = file.readString();

И это просто возвращает текст в виде строки. Надеюсь, это поможет некоторым людям.

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