Как написать текст в файл на внешнем хранилище на Android?

Написание какого-либо текста в файл на устройстве android, похоже, является серьезным делом. Начиная с ответа, приведенного здесь. Я внедрил следующий код в мой единственный актив "Hello-World":

try {
    OutputStreamWriter outputStreamWriter = new OutputStreamWriter(this.openFileOutput("config.txt", Context.MODE_PRIVATE));
    outputStreamWriter.write("lalala");
    outputStreamWriter.close();
} catch (IOException e) {
    Log.e("Exception", "File write failed: " + e.toString());
}

который не генерирует исключение, но, похоже, работает. Но есть ли способ увидеть файл, созданный с помощью File Manager на android? Кажется, что фрагмент кода пишет в "секретное" место в файловой системе Android, связанную с самим приложением (управляется с помощью this.openFileOutput).

Консультирование различных google-ссылок (this и это и это). Я придумал следующий код:

File file = new File(this.getExternalFilesDir("temp"), "testfile.txt");
FileOutputStream fileOutput = openFileOutput(file.getName(), Context.MODE_WORLD_WRITEABLE);
fileOutput.write("lalala");
fileOutput.close();

который вызывает ошибку

Error:(55, 19) error: no suitable method found for write(String) method FileOutputStream.write(int) is not applicable (actual argument String cannot be converted to int by method invocation conversion) method FileOutputStream.write(byte[],int,int) is not applicable (actual and formal argument lists differ in length) method OutputStream.write(int) is not applicable (actual argument String cannot be converted to int by method invocation conversion) method OutputStream.write(byte[],int,int) is not applicable (actual and formal argument lists differ in length) method OutputStream.write(byte[]) is not applicable (actual argument String cannot be converted to byte[] by method invocation conversion)

Итак, как это сделать правильно?

В качестве примечания: это только для отладочных/образовательных целей и не предназначено для участия в финальном приложении!

Чтобы быть ясным: я хочу создать файл внутри каталога temp, который я могу видеть с помощью FileManager (каталог temp находится на том же уровне, что и My Documents , Music, DCIM, Download и тому подобное...)

Ответ 1

Но есть ли способ увидеть файл, созданный с помощью Диспетчера файлов на Android?

Я не уверен, что такое "Диспетчер файлов", о котором вы говорите, поскольку Android на самом деле его нет. Тем не менее, вы пишете приложение внутреннее хранилище, и оно является приватным для приложения. Он не может быть просмотрен другими приложениями или обычными пользователями, за исключением укорененных устройств и с помощью некоторых громоздких инструментов Android SDK.

Итак, как это сделать правильно?

File file = new File(this.getExternalFilesDir(null), "testfile.txt");
FileOutputStream fileOutput = new FileOutputStream(file);
OutputStreamWriter outputStreamWriter=new OutputStreamWriter(fileOutput);
outputStreamWriter.write("lalala");
outputStreamWriter.flush();
fileOutput.getFD().sync();
outputStreamWriter.close();

также:

  • Проделайте эту работу в фоновом потоке

  • На Android 4.3 (API Level 18) и более старых устройствах вам необходимо удержать разрешение WRITE_EXTERNAL_STORAGE для работы с внешним хранилищем

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

MediaScannerConnection.scanFile(
  this,
  new String[]{file.getAbsolutePath()},
  null,
  null);

(где this - это некоторый Context, такой как Activity или Service)