我在 Marshmallow(api 23)。
我已经声明了相对权限并在运行时请求了这些权限。我通过{{1}获得了external storage directory
- “/ storage / emulated / 0” }。使用此文件实例(此处我称之为Environment.getExternalStorageDirectory()
),extF
不为空。但是extF.listFiles()
返回null。
在adb shell中,我检查了extF.getParentFile().listFiles()
目录,并且确实有两个子目录:
"/storage/emulated"
0
那么,为什么我不能在obb
到"/storage/emulated"
上获取Marshmallow(api23)
的子文件?谢谢你的解释。
答案 0 :(得分:1)
你可以像这样获得marshmallow中的文件列表
//this function will check for runtime permission so Add this block in your OnCreate() Method
if(checkandRequestPermission()) {
File sdCardRoot = Environment.getExternalStorageDirectory();
Log.w("SDCardRoot", "" + sdCardRoot);
File yourDir = new File(sdCardRoot, "/yourFolderName");
// This will check if directory is exist or not
if (!yourDir.exists()) {
yourDir.mkdirs();
}
if(yourDir.isDirectory()){
File[] content = yourDir.listFiles();
for(int i = 0; i<content.length;i++){
// Your List of Files
Log.w("List", "" + String.valueOf(content[i]));
}
}
现在如果你使用的是api level 23,那么你需要像这样添加运行时权限
// Declare this function to check for runtime permission
private boolean checkandRequestPermission(){
int storageread = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE);
List<String> listpermissionNeeded = new ArrayList<>();
if (storageread != PackageManager.PERMISSION_GRANTED) {
listpermissionNeeded.add(Manifest.permission.READ_EXTERNAL_STORAGE);
}
if (!listpermissionNeeded.isEmpty()) {
ActivityCompat.requestPermissions(this, listpermissionNeeded.toArray(new String[listpermissionNeeded.size()]),REQUEST_ID_MULTIPLE_PERMISSIONS);
return false;
}
return true;
}
在Manifiest中添加此权限
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
答案 1 :(得分:0)
那么,为什么我不能通过File.listFiles()获取这些文件?
您的应用对该目录没有读取权限。
答案 2 :(得分:0)
可能是Manifest中的权限问题: android:name =“android.permission.READ_EXTERNAL_STORAGE”*
如果这不起作用,只需确定路径是否正确
下面的代码对我有用
File f = new File(Environment.getExternalStorageDirectory()+ "");
if (f.exists()) {
File[] dff= f.listFiles();
}else{
Logs.debug("siz","Files not existed.");
}