2012-05-10 2 views
0

Мое приложение записывает на внешнюю SD-карту с помощью адаптера Samsung для вкладки галактики. Когда устройство USB «безопасно удалено», файлы все в порядке, однако, когда устройство удалено небезопасно, все вновь записанные файлы равны 0 байтам.0Byte файлы на внешнем USB-устройстве при неправильной размонтировке на Android Galaxy Tab 10.1

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

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

+0

'out.flush()' излишне, поскольку 'out.close()' также удаляет буфер перед закрытием 'Writer'. Ничего не повредит, это просто не нужно. – Chilledrat

ответ

2

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

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

    try { 
    // write stuff to out 

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

Подробнее в this Android Developer Blog post.

+0

Spot on thanks, я протестировал его с помощью: java.io.RandomAccessFile r = new RandomAccessFile (outputFile, "rw"); r.writeChars (json); r.getFD(). Sync(); Это работает отлично, даже если SD-карта удалена небезопасно. –

 Смежные вопросы

  • Нет связанных вопросов^_^