2014-03-03 40 views
1

我試圖訪問我的Android手機裏的文件,下面的代碼被用於它:Android的說,沒有這樣的文件或文件夾,即使它的存在

final File folder = new File("/storage/sdcard0/"); 
     for (final String fileEntry : folder.list()) { 
      System.out.println(fileEntry); 
     } 

它輕視列表中選擇一個空指針( )函數,這意味着它不是一個文件/目錄。但是,如果我將路徑更改爲/ storage /,則會打印一堆文件夾,其中包括sdcard0。我知道sdcard0實際上是一個文件夾/文件,因爲我也爲我的手機下載了一個文件管理器並瀏覽了這些文件。許多人建議使用getExternalStorageDirectory(),但這會導致相同的空指針。

我已經添加了這些權限:

<uses-permission android:name="android.permission.READ_INTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

編輯:我已經看了 android null pointer error

更新很多網站的 之一: 我檢查,如果它是使用isDirectory一個文件夾( ),它返回true,然後我試着canRead()並返回false,也許這是一個權限問題?

+1

沒有「android.permission.READ_INTERNAL_STORAGE」這樣的權限,雖然這不太可能是問題,因爲閱讀** EXTERNAL **存儲的操作通常還沒有執行。 –

+0

這很奇怪,因爲我從字面上看到了10多個與使用它的人的聯繫,爲什麼這麼常見? –

+0

你(或他們)混淆了內部和外部。請參閱清單權限的文檔。 –

回答

0

我終於想通了,如果滑動頂部的菜單欄(您收到通知)有「已作爲媒體設備」,如果你點擊有更多的設置,如果你啓用「媒體設備(MTP)」,當我通過USB插入到我的電腦時,沒有這個設置會自動卸載我的SD卡。

0

試圖通過這個越來越路徑外部存儲:

System.out.println(Environment.getExternalStorageState()); 

返回的路徑,外部存儲和交叉與你正在寫什麼檢查。

+0

我覺得你已經越來越近了,那個打印共享,但它仍然給我空指針 –

+0

從上面的代碼行輸出的字符串是什麼? –

+0

「共享」是它給了我什麼 –

1
final File folder = new File(Environment.getExternalStorageDirectory().getAbsolutePath()); 
for (final String fileEntry : folder.list()) { 
System.out.println(fileEntry); 
} 
+0

仍然拋出空指針 –

0

你可以試試這個代碼

final File folder = new File("/storage/sdcard"); 

    if (folder.getAbsoluteFile().exists()) { 
     for (final String fileEntry : folder.getAbsoluteFile().list()) { 
      System.out.println(fileEntry); 
     } 
    } 
+0

同樣的事情:(,謝謝你的回答,雖然 –

+0

你可以檢查sdcard0是否存在內存? 因爲在模擬器上你有sdcard而不是sdcard0。 – Shrikant

+0

我做了當我使用「/存儲/」它給了我一堆文件夾一個包括sdcard0 –

1

Environment.getExternalStorageState()這會給你外部存儲不是路徑的狀態。 要檢查路徑,請使用Environment.getExternalStorageDirectory()。getAbsolutePath()。

並根據您提到的狀態「共享」,似乎你正在測試,而你通過USB電纜訪問它到你的系統。 由於「共享」狀態表示「介質未安裝,並且通過USB大容量存儲共享」。

+0

對不起,我認爲當我發佈我的答案時,你已經明白了。 – Ankit

相關問題