Android открытый файл - PullRequest
       0

Android открытый файл

13 голосов
/ 12 октября 2011

Я пытался открыть файл для чтения.

При использовании: Scanner input = new Scanner(filename); файл не может быть найден

, но при использовании:

InputStream in = openFileInput(filename);
Scanner input = new Scanner(in);

Это сработало.Почему первая строка кода была неправильной?

Ответы [ 3 ]

11 голосов
/ 12 октября 2011

Файлы хранятся на устройстве в определенном, зависящем от приложения месте, что, как я полагаю, openFileInput добавляет в начале имени файла.Окончательный результат (местоположение + имя файла) составляется следующим образом:

/data/data/<application-package>/files/<file-name>

Также обратите внимание, что в документации говорится, что openFileInput параметр не может содержать разделители пути .

Чтобы избежать жесткого кодирования пути к местоположению, который в принципе может отличаться от устройства к устройству, вы можете получить объект File, указывающий на каталог хранилища, вызвав getFilesDir, и использовать его для чтения любого файла, который выхотел бы.Например:

File filesDir = getFilesDir();
Scanner input = new Scanner(new File(filesDir, filename));

Обратите внимание, что построение Scanner путем передачи String в качестве параметра приведет к тому, что сканер будет работать с содержимым строки, то есть интерпретировать его как фактическое содержимое для сканированияа не как имя файла для открытия.

9 голосов
/ 12 октября 2011

Это сводило меня с ума пару минут назад.Я забыл добавить эту строку в манифест:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

Я ожидал бы сообщение отказано в разрешении .Но только что получил файл не найден ...

В вашем случае: openFileInput открывает файл в каталоге данных вашего личного приложения (/data/data/your.package/filename).Это никогда не подводит.Но сканер пытается открыть его по корневому пути.Поэтому, если вы хотите прочитать файл с SD-карты, вы должны использовать Environement.getExternalStorageDirectory().getAbsolutePath() + "/" + filename.

0 голосов
/ 12 октября 2011
Scanner sc = new Scanner(new File(filename));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...