更新到 Oreo 后 ListFile 为空
Posted
技术标签:
【中文标题】更新到 Oreo 后 ListFile 为空【英文标题】:ListFile is null after updating to Oreo 【发布时间】:2018-12-08 09:59:12 【问题描述】:在我的 mibox 4k 更新到 android Oreo 后,该应用程序无法运行
代码查找外部存储
private String[] getUsbStoragePaths()
List<String> result = new ArrayList<>();
File storageDir = new File("/storage");
if(storageDir.isDirectory())
File[] subDir = storageDir.listFiles();
for(File dir : subDir)
if(dir.canRead())
result.add(dir.getAbsolutePath());
return result.toArray(new String[0]);
private List<File> getSubDirs(String path)
List<File> result = new ArrayList<>();
File root = new File(path);
if (root.exists() && root.canRead())
File[] subDirs = root.listFiles(); ->>>>>> alway null
if (subDirs !=null)
for(File dir: subDirs)
if (dir.isDirectory() && dir.canRead())
result.add(dir);
return result;
我的 USB 存储有子文件夹 根 ----子目录1 ----子目录2 ----子目录3 ----文件1
应用中的权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
并在运行时请求权限
private void requestStoragePermission()
if (!hasPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) ||
!hasPermission(, Manifest.permission.READ_EXTERNAL_STORAGE))
ActivityCompat.requestPermissions(this,
new String[]Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE, 1);
private boolean hasPermission(final String permission)
return PackageManager.PERMISSION_GRANTED == getApplicationContext().getPackageManager().checkPermission(
permission, getApplicationContext().getPackageName());
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
// Other things
requestStoragePermission();
getSubDirs 方法的结果为空, 文件[] subDirs = root.listFiles(); ->>>>>> 始终为空
【问题讨论】:
文件[] subDirs = root.listFiles(); ->>>>>> 始终为空。 'listFiles' 返回一个抽象路径名数组,表示由该抽象路径名表示的目录中的文件。如果此抽象路径名不表示目录,则此方法返回 null。这个根文件不是我猜的目录,请看一下。 1.developer.android.com/reference/java/io/File#listFiles() 2.***.com/questions/30062035/… @Ankita-user3449434 这个根文件是目录,路径是“/storage/16 digit” 它适用于 getSubDirs("/storage/emulated/0/"),但不适用于 getSubDirs("/storage/39EB...../") Android Oreo 在 Mibox 4k 设备上存在许多错误。现在它已更改为测试版 【参考方案1】:This code will give you files which are stored inside directory.
String pattern = ".png";
File directory = new File(Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES), "Your directory name");
File[] fileList = directory.listFiles();
if (fileList != null && fileList.length > 0)
for (File file : fileList)
//if you need particular file format than check with that otherwise remove it.
if (file.isFile() && file.getName().endsWith(pattern))
//
【讨论】:
【参考方案2】:我的解决方案: 将目标从 25 更改为 26 但不支持unicode名称
【讨论】:
以上是关于更新到 Oreo 后 ListFile 为空的主要内容,如果未能解决你的问题,请参考以下文章
将 Xcode 6.4 更新到 Xcode 7.0 后,NSData dataWithContentsOfURL 为空
更新到 Gradle 5.6.4 和 Android Studio 3.6.1 后 nativeLibraryDir 显示为空