2012-11-27 86 views
1

背景移動文件到App內部數據(存儲)

我需要採取下列文件,並將其移動到我的應用程序的內部存儲。

MNT/SD卡/下載

我可以成功地使用下複製文件,刪除然後從SD卡的文件實現這一點。

writer = new BufferedWriter(new FileWriter(file)); 
writer.write(data); 
writer.close(); 

在複製大文件時,我需要將空間加倍(我沒有)。

問題

是否可以「移動」文件(改變目錄),而不是複製刪除

其他信息 調查此事,我發現:

public boolean renameTo (File newPath) 

doc

兩條路徑都在同一個掛載點上。在Android上,嘗試在 內部存儲和SD卡之間複製時,最有可能遇到此限制的應用程序是 。 quote taken from here

我不知道如果我能得到相同的兩個路徑掛載點。

+1

這變得醜陋。就暴露的API而言(即使在涉及應用程序用戶標識的unix級別),外部存儲和內部存儲也是分開的。但是,您暫時需要雙倍空間的問題表明您擁有最新設備之一,其中外部存儲卷實際上是在內部存儲上仿真的。不幸的是,你可能沒有能力在不復制文件的情況下重新分配這些磁盤塊。 –

+0

謝謝克里斯這是非常有用的,因爲我懷疑這將是這種情況。 –

回答

2

聽起來您正在處理非常大的文件,因此您可能會考慮進行某種漸進式縮小/擴大其他類型的操作 - 儘管大概只有當您可以檢測到沒有足夠的空間來存放完整副本時。

+0

雖然我懷疑我會用漸進縮小一個文件/增加一個文件。因爲如果應用程序中斷(關閉),這會使文件處於高度腐敗風險。我相信這是解決方案。 –

+0

如果您在刪除它之前先編寫一個塊,並且能夠從一個半完成的傳輸中識別一對文件,那麼您可能會使它相當安全。當然,你應該在後臺服務中這樣做,而不是在一個活動中,而不是在UI線程上。這個過程仍然會死亡/崩潰/被殺死,你應該設計從中恢復,但這種方式的可能性要小得多。 –

0

我試圖做相反的事情(內部的SD,同樣的事情)複製然後刪除過程是我發現工作的唯一一個。我想這是有道理的,你不能只是'重命名',因爲這些文件在不同的物理存儲區域(不確定是否適用於某些Android設備上的某些'虛擬'SD卡)。如果它們位於不同的存儲空間中,則不能只交換文件頭上的指針。

+0

感謝您的輸入simsam7,很高興知道我不是唯一面臨這些問題的人。 –

+0

祝你好運! :-) – simsam7

相關問題