无法从 SD 卡读取目录或文件

Unable to read directories or files from a sd card

我是 android 开发的新手,我试图从我的 SD 卡中读取一个目录,但没有成功。下面是我为实现它而编写的代码

File sdcard = Environment.getExternalStorageDirectory();           
if(sdcard.exists()) {
    Log.d("Sd card", "Sd card exist");
    File[] file_names = sdcard.listFiles();
    for(File x : file_names) {
        Log.d("File Name",x.getName());
    }
}

Control 通过了 if 条件,然后我在 "for each" 循环行得到一个 NullPointerException。可能函数 sdcard.listFiles() 正在返回 null。我有一张包含许多文件夹和文件的 SD 卡。实际上,我必须为我的 SD 卡上可用的目录 "Attachments" 创建一个目录文件对象。我还尝试了以下代码来实现相同的目的。

File file = new File(android.os.Environment.getExternalStorageDirectory() +     File.separator + "Attachments");

File file = new File(Environment.getExternalStorageDirectory() + File.separator + "Attachments");

当我调用函数 file.exists() 时,这两个代码都返回 false。

我也通过下面的代码检查了sd卡是否挂载了

String sdCardAvail = Environment.getExternalStorageState();
 if(sdCardAvail.equals(Environment.MEDIA_MOUNTED))
        Log.d("Card status", "Sd card Available");

以上代码在 log cat 处打印了 "Sd card Available"。 所以请帮我看看我是做对了还是遗漏了什么。

谢谢....

为了读取或写入外部存储上的文件,您的应用必须获得READ_EXTERNAL_STORAGEWRITE_EXTERNAL_STORAGE系统权限。例如:

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

如果您需要读取和写入文件,那么您只需要请求 WRITE_EXTERNAL_STORAGE 权限,因为它隐含地也需要读取权限。

另见此 Documentation。它将解决您未来所有关于 存储 的问题。