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.