0Байтовые файлы на внешнем USB-устройстве, если они не отключены должным образом на Android Galaxy Tab 10.1.

Мое приложение пишет на внешнюю SD-карту, используя адаптер Samsung для вкладки galaxy. Когда USB-устройство "безопасно удалено", тогда все файлы в порядке, однако, когда устройство небезопасно удалено, тогда все вновь записанные файлы имеют размер 0 байт.

Вот урезанная версия кода:

    String json = "{some data to export}";

    String folderPath = Environment.getExternalStorageDirectory().toString() + File.separator + "Storages" + File.separator + "usb" + File.separator + "sda";
    File outputFile = new File(folderPath, "export.txt");

    FileWriter writer = new FileWriter(outputFile);
    BufferedWriter out = new BufferedWriter(writer);
    out.write(json);
    out.flush();
    out.close();

Как вы можете видеть, я сбрасываю и закрываю файл, однако мне кажется, что Android на самом деле не заботится о том, чтобы сбросить содержимое, прежде чем размонтировать usb.

Очевидное решение состоит в том, чтобы сказать пользователям безопасно размонтировать, однако мы все знаем, на что похожи пользователи. Так есть ли способ заставить Android программно сбрасывать содержимое файлов на SD-карту? (в дополнение к BufferedWriter.flush / BufferedWriter.close)

Устройство Samsung Galaxy Tab 10.1 GT-P7510 под управлением Android 3.1

1 ответ

Решение

Вам нужно sync() Ваш файл перед закрытием.

  FileOutputStream fos=new FileOutputStream(someLikelyFileObject);
  BufferedOutputStream out=new BufferedOutputStream(fos);

  try {
    // write stuff to out

    out.flush();
  }
  finally {
    fos.getFD().sync();
    out.close();
  }

Подробнее читайте в этом блоге разработчика Android.

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