2016-04-06 117 views
0

我想在應用程序關閉時刪除文件。我在我的活動的onDestroy方法中執行刪除。但是當我檢查文件是否被刪除時,在關閉應用程序後,文件仍然存在。如何在應用程序關閉時刪除文件

這裏是我的代碼看起來像至今:

@Override 
protected void onDestroy() { 

    File file = new File(Environment.getExternalStorageDirectory().getPath(), "fileName.txt"); 
    if(file.exists()){ 
     file.delete(); 
    } 

    super.onDestroy(); 
} 

編輯:出示有關創建一個臨時文件的代碼片段:

try { 
     file = File.createTempFile(Environment.getExternalStorageDirectory().getPath(), fileName); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
+0

https://docs.oracle.com/javase/7/docs/api/java/io/File.html#deleteOnExit%28%29 – Kenney

+0

在Java中,您可以創建一個臨時文件:http:// stackoverflow.com/a/16691560/4065876。我不知道是否在Android這個作品。 –

+0

@Kenney,我用'deleteOnExit()'替換了我的'delete()'方法,但它不起作用。 –

回答

1

你是不應該依賴於onDestroy方法被調用(系統可以在生命週期到達此階段之前中斷您的過程)。 我會建議使用臨時文件夾,保持這樣的文件,但它仍然是你的責任,保持臨時文件的大小合理的限度(〜1 MB)相對於臨時文件

UPDATE(內代碼段)
@EbadSaghar,您試圖提供完整路徑作爲文件名前綴ExternalStorageDirectory。 但無論如何,這種方法有點不同:File.createTempFile函數除了在特殊的臨時文件目錄中使用隨機名創建文件外,什麼也不做。因此,它仍然是我們的責任,提供一個臨時文件夾的功能,系統知道這個文件是適當的刪除:

public File getTempFile(Context context, String url) { 
    File file; 
    try { 
     String fileName = Uri.parse(url).getLastPathSegment(); 
     file = File.createTempFile(fileName, null, context.getCacheDir()); 
    catch (IOException e) { 
     // Error while creating file 
    } 
    return file; 
} 

cachedDir是內部存儲,這意味着其他應用程序不能在這裏寫入文件,所以你應該執行FileProvider來提供你的臨時文件的URI。

+0

臨時文件似乎很有前途,但是,我不認爲我可以使用臨時文件,因爲我正在使用這些文件作爲照相機「服務」拍攝的照片。 –

+0

爲什麼你認爲你不能? –

+0

當攝像機服務將圖像字節數組寫入該文件時,我得到一個空的異常錯誤,該文件確實是作爲臨時文件創建的 –

0

您可以嘗試使用Application。您可以覆蓋onTerminate()以刪除您的文件。

+1

來自[docs](http://developer.android.com/reference/android/app/Application.html#onTerminate()): '此方法適用於仿真過程環境。它永遠不會在生產型Android設備上調用,通過簡單地殺死進程來刪除進程;在執行此操作時,不會執行用戶代碼(包括此回調)。 –

+0

是的。這是正確的。感謝您的更正! –

0

我發現了一些與創建文件的方式有關的潛在問題,特別是因爲您想刪除它們。這樣你就可以將文件存儲在你的應用的本地緩存中。

// get the cache directory for our present `Activity`; 
// referred to by `context` 
File directory = context.getCacheDir(); 

File file = File.createTempFile("prefix", "extension", directory); 

[Docs該文件將是私有的您的應用程序,而如果設備存儲空間不足,安卓可以擺脫他們。儘管你不應該依賴這個。您可能想看看Android Activity Life-cycle。因此,如果您保留了在會話中創建的文件的跟蹤。擺脫onDestroy()中的這些文件。我會建議保存這個列表作爲SharedPref什麼的。原因?那onDestroy()不是這個星球上最可靠的東西。如果保存了文件,可以在下一次調用onDestroy()時刪除它們(如果它們仍然存在)。

就我個人而言,我可能不會使用onDestroy()來達到此目的。也許onStop()更可靠。它的設計,你將是最好的評委。 :)

相關問題