如何列出android目录中的文件?

Rog*_*vis 114 android

到目前为止,这是我的代码:

String path = Environment.getExternalStorageDirectory().toString()+"/Pictures";

        AssetManager mgr = getAssets();

        try {

            String list[] = mgr.list(path);
            Log.e("FILES", String.valueOf(list.length));

            if (list != null)
                for (int i=0; i<list.length; ++i)
                    {
                        Log.e("FILE:", path +"/"+ list[i]);
                    }

        } catch (IOException e) {
            Log.v("List error:", "can't list" + path);
        }
Run Code Online (Sandbox Code Playgroud)

然而,虽然我在那个目录中有文件,但它返回list.length = 0 ...任何想法?

Yur*_*ury 301

试试这个:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
Run Code Online (Sandbox Code Playgroud)

  • 我认为您没有指定文件夹中的文件.尝试将file []检查为null.如果它为null,则表示没有任何结果,file.length会导致异常. (8认同)
  • 谢谢Yury,奇怪的是file.length给出了一个NullPointerException ...任何想法?Spasibo! (7认同)
  • 看来它只是缺少一个"/":)谢谢! (4认同)
  • 它是否在棉花糖更新? (3认同)
  • 男人,它的工作就像一个魅力,谢谢你 (2认同)
  • 就像魅力一样工作!我的手机是 Moto G4,**Android N**。如果有人遇到“无法播放视频错误”。您需要转到移动设备“设置 --&gt; 应用程序 --&gt; 您的应用程序 --&gt; 权限 --&gt; 启用存储。”如果您遇到此错误,应手动执行此操作。确保清单中有 `&lt;uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /&gt;` 。对于面临“NullPointerException”的人 - 您正在尝试访问应用程序内部存储中的私有文件,抱歉您不能这样做。 (2认同)

Dan*_*ugh 41

我刚刚发现:

new File("/sdcard/").listFiles() 如果您没有,则返回null:

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

在AndroidManifest.xml文件中设置.

  • 此外,在Android 6.0+上,需要在Settings-> Apps-> Your app-> Permissions中授予权限. (7认同)
  • 我知道这是事实,但......这是答案吗?或者应该是评论? (6认同)

Ree*_*eed 11

好吧,AssetManager列出assetsAPK文件中的文件夹中的文件.所以你在上面的例子中列出的是[apk]/assets/sdcard/Pictures.

如果你把一些图片assets放在你的应用程序里面的文件夹中,并且它们在Pictures目录中,你就可以了mgr.list("/Pictures/").

另一方面,如果你的APK文件之外的文件位于APK文件之外的文件Pictures夹中,那么你可以这样使用File:

File file = new File(Environment.getExternalStorageDirectory(), "Pictures");
File[] pictures = file.listFiles();
...
for (...)
{
log.e("FILE:", pictures[i].getAbsolutePath());
}
Run Code Online (Sandbox Code Playgroud)

以及来自文档的相关链接:
文件
资产管理器


小智 10

除了以上所有答案:

如果您使用的是Android 6.0+(API Level 23+),则必须明确要求获得访问外部存储的权限.只是拥有

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
Run Code Online (Sandbox Code Playgroud)

在你的清单中是不够的.您还积极请求您的活动中的权限:

//check for permission
if(ContextCompat.checkSelfPermission(this,
            Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_DENIED){
    //ask for permission
    requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, READ_EXTERNAL_STORAGE_PERMISSION_CODE);
}
Run Code Online (Sandbox Code Playgroud)

我建议阅读:http: //developer.android.com/training/permissions/requesting.html#perm-request