2014-02-16 49 views
0

我試圖在手機的外部存儲(SD卡)中創建一個文件。Environment.getExternalStorageDirectory()不起作用

File F = new File(Environment.getExternalStorageDirectory() + File.separator + "MyBrand" + File.separator + "MyApp" + File.separator + "MyFile.srl");

但是這是在內部存儲區創建。我檢查了Windows資源管理器。調試時,F的路徑是「/mtn/sdcard/MyBrand/MyApp/MyFile.srl」,這是錯誤的,因爲在Windows資源管理器中,SD卡的名稱實際上是「SD卡」(帶有空格)。我也在getExternalStorageDirectory()的末尾嘗試了.getAbsolutePath`,但它做了完全相同的事情。

我創建這個文件代碼:

if (F.exists() == false) 
{ 
    try 
    { 
    F.getParentFile().getParentFile().mkdir(); 
    F.getParentFile().mkdir(); 
    F.createNewFile(); 
    } 
    catch (IOException e) 
    { 
    e.printStackTrace(); 
    } 

    scr_save(); 
} 
else 
    scr_load(); 

它做的mkdirs()和createNewFile()就好了,但scr_save和scr_load總是拋出異常,要麼FileNotFound或IOException異常。

編輯: 我也一直在測試它,當沒有插入我的電腦,只是爲了確保沒有干擾。爲了安全起見,我總是刪除路徑和文件,然後拔掉它。它似乎創建目錄和文件,但然後不正確地閱讀它(它可能無法正確序列化?我使用此文件來存儲序列化的對象)。編輯: 最初有一個錯誤。我將路徑+文件名作爲F的單個參數。現在,我將路徑和文件名作爲2個獨立的字符串傳遞。不過,我仍然遇到了同樣的問題:(

我有正確的權限在我的清單(.WRITE_EXTERNAL_STORAGE)

我使用的是Windows 7 64位,也是Eclipse中的64位版本。我的手機是LG-MS770。

無論如何請幫忙。不知道爲什麼getExternalSorage不工作。

+0

http://stackoverflow.com/questions/5694933/find-an-external-sd-card-location – gipinani

回答

1

我試圖創建在外部存儲我的手機的一個文件(SD卡)

Android SDK中所說的「外部存儲」不是SD卡,在大多數設備自2011年初

不知道爲什麼getExternalSorage工作不製造什麼。

它工作得很好,並且as documented。這根本不符合你的期望。

直到Android 4.4,沒有記錄和支持的方式來訪問任何類型的可移動存儲。在Android 4.4上,您現在有getExternalFilesDirs()getExternalCacheDirs()(注意複數形式),如果存在這種存儲,可能會讓您訪問可移動存儲上的特定目錄。

+0

好thx清理。所以我不想要實際的SD卡,只是由該操作定義的「外部存儲」。 – DrZ214

0

首先,/mnt/sdcard/MyBrand/MyApp/MyFile.srl是正確的:SD Card可以是由Windows資源管理器分配的標籤。
無論如何,看看getExternalStorageDirectory documentation的地方說:

此目錄目前可能不會被訪問,如果已安裝的 他們的計算機上的用戶,已經從設備,或其他一些問題,刪除已經發生了。您可以使用getExternalStorageState()來確定其當前狀態。

有可能的,調試時SD Cardmounted,這是錯誤的。
然後,如果失敗,mkdir不會丟失exception; createNewFile應該這樣做,但是當你讀到類似的東西時「或者其他問題發生了」,你應該爲自己的頭痛準備。

+0

是的,我一直在測試插入和拔出計算機。我添加了一個編輯到我的OP。 – DrZ214

0

getExternalStorage很混亂。它不代表您插入手機的SD卡,而是插入手機時將顯示在計算機上的內容。

這是您可以瀏覽以放置一些圖像,音樂等的存儲。在手機上或從手機中獲取。

相關問題