首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么File.listFiles()方法只能列出目录

为什么File.listFiles()方法只能列出目录
EN

Stack Overflow用户
提问于 2020-09-15 09:13:49
回答 4查看 892关注 0票数 2

我在Android R上遇到了一个真正的连线问题,这就是我所做的。

  1. 声称我将在Manifest.xml.

中使用WRITE_EXTERNAL_STORAGE和READ_EXTERNAL_STORAGE权限。

代码语言:javascript
复制
   <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
   <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

  1. 检查和请求代码

中的权限

代码语言:javascript
复制
   private void checkPermission() {
       int pid = android.os.Process.myPid();
       int read = checkPermission(Manifest.permission.READ_EXTERNAL_STORAGE, pid, 1);
       int write = checkPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE, pid, 1);
       ArrayList<String> permissions = new ArrayList<>();
       if (read != PackageManager.PERMISSION_GRANTED)
           permissions.add(Manifest.permission.READ_EXTERNAL_STORAGE);
       if (write != PackageManager.PERMISSION_GRANTED)
           permissions.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
       if (permissions.size() > 0) {
           String[] permissionArray = new String[permissions.size()];
           permissions.toArray(permissionArray);
           requestPermissions(permissionArray,1);
       }
   }

   public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
                                          @NonNull int[] grantResults) {
       //I ignored the result check here since I definitely know that I clicked on the "Allow" button when
       //I was asked to allow the permissions
       File directory = new File("/storage/emulated/0/ebook");
       File[] files = directory.listFiles();
       for(File file : files)
       {
           try {

               Log.i("tagd", "file name: " +file.getCanonicalPath());

           } catch (IOException e) {
               e.printStackTrace();

           }
       }
   }

好了,连线的东西来了。从日志里,我只有一行:

代码语言:javascript
复制
file name: /storage/emulated/0/ebook/temp

但在文件夹“电子书”中,实际上有40个项目。39份PDF文件和1个文件夹“临时”。所有PDF文件都不见了。在具有任何类型文件的其他目录中也发生了同样的事情。

代码语言:javascript
复制
generic_x86_64_arm64:/sdcard/ebook $ ls
1.pdf                                                       dovado\ 4GR\ Reference_manua62X.pdf.pdf
111(1).pdf                                                  fit_diff_pages.pdf
2013\ Mar.pdf                                               help.pdf
2017-08-03_SZ_NK.pdf                                        interactiveform_enabled.pdf
223622-100518.pdf                                           invoice\ 2013-1-28.pdf
59df269384986.pdf                                           pass-111111.pdf
732101500002013-07-21_03-55-53-3352579.pdf                  pdf_commenting_new.pdf
Aeroplane\ -\ bjo.pdf                                       pdfa_pagina_a4_gear_movie.pdf
BoardMeetingMinutes.1024.pdf                                signature.pdf
CreditCardReckoning201211.pdf                               temp
DEMO_SV_lowsize.pdf                                         test.pdf
Geografie_\ Gr\ 10\ Portefeuljeboek\ -\ vnull.pdf           test.pfx
Geografie_\ Gr\ 10\ Portefeuljeboek\ -\ vnull_unlocked.pdf  test1.pdf
Layali_Ashar[1].pdf                                         test28k.pdf
PDF\ markup\ design-Model.pdf                               test_att.pdf
Praise\ And\ Thanksgiving\ (Morning\ Has\ Broken).pdf       visa-china.pdf
Professional_Android_2_Application_Development.pdf          为人父母.pdf
Welcome_to_Radaee_PDF_Master.pdf                            张霁\ 简历\ 3\ -\ 副本.pdf
Xaml_Introduction.pdf                                       比亚迪.pdf
__ViewPoint\ 8000________________\ (2).pdf                  美时每客CakeTime移动平台项目开发分析报告.pdf

这个问题只能在Android上复制,代码非常简单,在其他Android版本上也很好。有人知道这里发生了什么吗?任何帮助都将不胜感激,谢谢。

EN

回答 4

Stack Overflow用户

发布于 2022-02-22 05:49:45

这似乎与android 11的存储更新有关。这是一个非常恼人的变化。他们没有提供很多有用的错误信息,就悄无声息地破坏了API契约。要么抛出异常,要么在日志中添加一些警告,这将为节省开发人员的时间提供更好的线索。

https://developer.android.com/about/versions/11/privacy/storage

票数 1
EN

Stack Overflow用户

发布于 2020-09-15 14:03:27

它可能与权限相关??此方法有一个异常。

如果存在安全管理器,并且它的

(String)方法拒绝对目录的读取访问,则为SecurityManager#checkRead

https://developer.android.com/reference/java/io/File#listFiles()

票数 0
EN

Stack Overflow用户

发布于 2020-12-28 14:19:13

我也有过类似的问题。重新启动设备解决了问题..。好奇怪..。也许是安卓系统的错误

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63898697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档