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