Как получить доступ к внутренней памяти в Android

Я хочу хранить файлы .docx, сгенерированные и измененные с помощью приложения Android, во внутреннюю память телефонов Android (все модели телефонов одной и той же модели, если это поможет). У меня работает загрузка шаблона (расположенного в приложении) и изменение полей, но я не могу сохранить файлы.

Я использую docx4j, у которого есть метод сохранения:

private void writeDocxToStream(WordprocessingMLPackage template,
        String target) throws IOException, Docx4JException {
            File f = new File(target);
            template.save(f);
}

Я пробовал другие более "ручные" способы, но у меня всегда одна и та же проблема:

какими должны быть входные данные для целевого каталога?

Кажется, что это легко сделать для внешнего хранилища, но что касается внутреннего хранилища, то это нечто другое.

Когда я просто пытаюсь вывести строку в test.txt, а затем вернуть в нее строку, используя классический способ BufferedReader, InputStreamReader, FileInputStream, я вообще не могу получить эту информацию.

Информация по этой теме очень разбросана, я провел полдня, читая о тысячах способов достижения хранилища, но ни один из них не соответствует моей проблеме.

Я установил <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> в своем манифесте, чтобы быть уверенным, но это ничего не меняет.

Кроме того, и, возможно, это связано с проблемой, я не могу получить доступ к файлам (с устройства или с компьютера) на своем тестовом устройстве (Samsung Galaxy 5S, на котором можно запустить приложение), у меня, кажется, есть почти все папки, но не любые файлы в них, кроме нескольких файлов xml и txt... (Тем не менее, я по-прежнему ничего не получаю при выполнении: запись в EditText - сохранение в файле - сохранение файла в .txt - получение строки - просмотр строки в textView).

Это очень важно, так как мне нужно получить файлы .docx для дальнейшего использования после их создания.

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


person Stone Edge    schedule 06.08.2015    source источник
comment
target должен быть путем во внутренней памяти вашего приложения. Какой у вас код для вызова writeDocxToStream?   -  person alijandro    schedule 06.08.2015
comment
writeDocxToStream(wordMLPackage, (context.getDir("testfile", Context.MODE_WORLD_READABLE)).getPath().toString()+"/test.docx"); мой код   -  person Stone Edge    schedule 07.08.2015


Ответы (2)


Кажется, что это легко сделать для внешнего хранилища, но что касается внутреннего хранилища, то это нечто другое.

Для записи во внешнее хранилище вы используете конструктор File с двумя параметрами, в котором вы предоставляете объект File, указывающий на некоторое корневое расположение во внешнем хранилище, например:

new File(getExternalFilesDir(null), target);

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

new File(getFilesDir(), target);
person CommonsWare    schedule 06.08.2015

Вам не нужно иметь разрешение android.permission.WRITE_EXTERNAL_STORAGE, если вы записываете свой файл в личное внутреннее хранилище приложения.

В вашем коде с вызовом

context.getDir("testfile", Context.MODE_WORLD_READABLE)).getPath().toString()+"/test.docx";

файл будет записываться по пути

/data/data/com.yourpackage.name/app_testfile/test.docx

Если запись работает успешно, вы можете прочитать и получить содержимое файла, используя указанный выше путь.

person alijandro    schedule 07.08.2015