Ответ 1
Файлы хранятся на устройстве в определенном зависимом от приложения месте, которое, как я полагаю, добавляет openFileInput
в начале имени файла. Конечный результат (местоположение + имя файла) строится следующим образом:
/data/data/<application-package>/files/<file-name>
Обратите внимание, что в документации указано, что параметр openFileInput
не может содержать разделители путей.
Чтобы избежать жесткого кодирования пути местоположения, который в принципе даже отличался от устройства к устройству, вы можете получить объект File
, указывающий на каталог хранилища, вызывая getFilesDir
и использовать его для чтения любого файла вы хотели бы. Например:
File filesDir = getFilesDir();
Scanner input = new Scanner(new File(filesDir, filename));
Обратите внимание, что построение Scanner
путем передачи String
в качестве параметра приведет к тому, что сканер будет работать с содержимым строки, т.е. интерпретирует его как фактический контент для сканирования, а не как имя файла для открыто.