Android listFiles()无法返回内部存储全部文件问题求助
Android内部存储listFiles()仅返回单个文件的解决办法
你的问题核心是文件路径构造错误:在save方法中误用了File.pathSeparator作为目录分隔符,导致目标文件没有被创建到预期的files目录下。
问题分析
File.pathSeparator是用于分隔多个独立文件路径的系统符号(Android下为:),而非目录与文件之间的分隔符。你当前的代码会生成类似/data/user/0/org.filemanager/files:z1.txt的路径,这意味着z1.txt等文件被创建在了files目录的同级目录下(命名为files:z1.txt),而非files目录内部,自然无法被directory.listFiles()扫描到。
修复方案
修改save方法中创建File对象的逻辑,改用以下两种正确方式之一:
方式1:推荐使用File双参数构造方法(自动适配系统分隔符)
private void save(String filename, String data) { try { // 直接通过目录File对象和文件名创建子文件 File file = new File(directory, filename); if (!file.exists()) { file.createNewFile(); } try (FileOutputStream outputStream = new FileOutputStream(file)) { outputStream.write(data.getBytes(StandardCharsets.UTF_8)); } } catch (Exception e) { throw new RuntimeException(e); } }
方式2:替换为目录分隔符File.separator
private void save(String filename, String data) { try { // 使用File.separator作为目录与文件的分隔符 File file = new File(directory + File.separator + filename); if (!file.exists()) { file.createNewFile(); } try (FileOutputStream outputStream = new FileOutputStream(file)) { outputStream.write(data.getBytes(StandardCharsets.UTF_8)); } } catch (Exception e) { throw new RuntimeException(e); } }
额外优化
你配置的外部存储权限(READ_EXTERNAL_STORAGE、WRITE_EXTERNAL_STORAGE等)对应用内部存储操作毫无作用,可以删除这些权限声明以简化配置。
修改后重新运行,z1.txt、z2.txt、z3.txt会被正确创建到files目录下,此时directory.listFiles()就能返回包含profilesInstalled在内的4个文件。
内容的提问来源于stack exchange,提问作者Harry
相关产品推荐
相关产品推荐

