2012-05-10 23 views
0

我的應用程序使用Galaxy適配器爲galaxy選項卡寫入外部SD卡。 當USB設備被「安全地移除」時,文件都可以,但是當設備被不安全地移除時,所有新寫入的文件都是0字節。0當在Android Galaxy Tab 10.1上未正確卸載時,外部USB設備上的字節文件

下面是代碼的削減版本:

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)

該器件是一款三星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

現貨感謝,我測試了它: java.io.RandomAccessFile r = new RandomAccessFile(outputFile,「rw」); r.writeChars(json); r.getFD()。sync(); 即使SD卡被不安全地移除,它也可以很好地工作。 –

相關問題