Android说没有这样的文件或文件夹,即使它在那里

时间:2014-03-03 05:51:14

标签: android file nosuchfileexception

我正在尝试访问Android手机中的文件,并使用下面的代码:

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

它在list()函数上抛出一个空指针,这意味着它不是文件/目录。但是,如果我将路径更改为/ 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,也许这是一个权限问题?

5 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

最后我想通了,如果你滑动顶部菜单栏(你收到通知的地方)那就是“连接为媒体设备”,如果你点击那里有更多的设置,并且你启用了“媒体设备(MTP) “当我通过USB将它插入我的计算机时,没有这个设置是自动卸载我的SD卡。

答案 2 :(得分:1)

Environment.getExternalStorageState()这将为您提供外部存储状态而不是Path。 要检查路径,请使用Environment.getExternalStorageDirectory()。getAbsolutePath()。

根据您提到的“共享”状态,当您通过USB线缆访问系统时,您似乎正在测试。 因为“共享”状态意味着“媒体不存在,并通过USB大容量存储共享”。

答案 3 :(得分:0)

尝试通过以下方式获取外部存储路径:

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

返回外部存储的路径,并用你正在编写的内容进行交叉检查。

答案 4 :(得分:0)

你能试试这段代码吗?

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

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