簡體   English   中英

無法獲取外部存儲目錄的文件

[英]Can't get files of external storage directory

所以我試圖將所有文件都保存在某個目錄中,但是在嘗試使用file.listFiles()時總是會收到NullPointerException

我的清單文件中包含正確的權限(在應用程序標記之前):

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

碼:

private void moveFiles() {
        String MYTAG = "Mover";
        if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
            File folder = new File(Environment.getExternalStorageDirectory() + "/_appTests/");
            if(folder.isDirectory()) {  // true
                // get all files
                listFilesForFolder(folder);   // Exception is thrown here
                int amount = 0;
                for (File f : allFiles) {
                    String destDir = getMoveDir(f.getName());
                    try {
                        moveFile(f.getAbsolutePath(), destDir);
                    } catch (IOException e) {
                        Log.e(MYTAG, "Error: "+e.getMessage()+" while moving file: "+ f.getName());
                    }
                    Log.i(MYTAG, destDir);
                    amount++;
                }
                Toast.makeText(MainActivity.this, "[" + MYTAG + "] Moved " + amount + " files!", Toast.LENGTH_SHORT).show();
                Log.i(MYTAG, "Moved " + amount + " files!");
            }
        }

}

public void listFilesForFolder(File folder) {
    for (File fileEntry : folder.listFiles()) // attempted to get length of a null array
    {
        if (fileEntry.isDirectory()) {
            // recursive call if directory
            listFilesForFolder(fileEntry);
        } else {
            // add to global list
            allFiles.add(fileEntry);
        }
    }
}

我也無法訪問和讀取目錄_appTests中的文件,在這種情況下會引發EACCESS異常(拒絕權限)。

路徑正確,目錄也位於/ scard / _appTests

我是否必須使用超級用戶特權才能訪問此目錄?

應用程序minSdkVersion是22(Android 5.1),我在手機上運行Android 6.0,但是我不使用運行時權限請求,因此將它們包含在清單文件中。

嘗試在“設置”中手動授予“存儲”權限。

當有人將設備升級到android 6.0時,我們遇到了同樣的問題(我們的應用程序具有compileSdk 21)

嘗試將以下內容添加到清單中:

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

由於您嘗試訪問該文件,因此可以解決該問題。

您還需要添加讀取文件的權限,這是:

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

如果目標> sdk 23,則清單中的權限將無法正常工作。您需要在運行時上獲得許可才能正常工作。

Map<String, File> externalLocations = ExternalStorage.getAllStorageLocations();
File sdCard = externalLocations.get(ExternalStorage.SD_CARD);
File externalSdCard = externalLocations.get(ExternalStorage.EXTERNAL_SD_CARD);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM