如何列出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); } 

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

谢谢!

尝试这个:

 String path = Environment.getExternalStorageDirectory().toString()+"/Pictures"; Log.d("Files", "Path: " + path); File directory = new File(path); File[] files = directory.listFiles(); Log.d("Files", "Size: "+ files.length); for (int i = 0; i < files.length; i++) { Log.d("Files", "FileName:" + files[i].getName()); } 

我刚刚发现:

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

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

在你的AndroidManifest.xml文件中设置。

那么, AssetManager列出您的APK文件中的assets文件夹中的文件。 所以你在上面的例子中列出的是[apk] / assets / sdcard / Pictures。

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

另一方面,如果您的SD卡上的文件在您的APK文件之外,则在Pictures文件夹中,您将使用File为:

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

和文档中的相关链接:
文件
资产经理

除了上面所有的答案:

如果您使用的是Android 6.0+(API Level 23+),则必须明确要求访问外部存储的权限。 简单地有

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

在你的舱单里是不够的。 您也正在主动请求您的活动许可:

 //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); } 

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

您的path不在资产文件夹内。 您可以通过AssetManager.list()枚举assets文件夹中的文件,也可以使用AssetManager.list()枚举SD卡上的文件

 String[] listOfFiles = getActivity().getFilesDir().list(); 

要么

 String[] listOfFiles = Environment.getExternalStoragePublicDirectory (Environment.DIRECTORY_DOWNLOADS).list(); 

有两件事情可能会发生:

  • 您没有将READ_EXTERNAL_STORAGE权限添加到您的AndroidManifest.xml
  • 你的目标是Android 23,而不是向用户要求这个权限。 下载到Android 22或询问用户的权限。

尝试这个:

 public class GetAllFilesInDirectory { public static void main(String[] args) throws IOException { File dir = new File("dir"); System.out.println("Getting all files in " + dir.getCanonicalPath() + " including those in subdirectories"); List<File> files = (List<File>) FileUtils.listFiles(dir, TrueFileFilter.INSTANCE, TrueFileFilter.INSTANCE); for (File file : files) { System.out.println("file: " + file.getCanonicalPath()); } } }