HarmonyOS鸿蒙Next中使用listFile时会将非图片类型也获取到

HarmonyOS鸿蒙Next中使用listFile时会将非图片类型也获取到

我已经填了匹配后缀了,为什么还会返回同级其他目录

image

image

image


更多关于HarmonyOS鸿蒙Next中使用listFile时会将非图片类型也获取到的实战教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

这个问题我之前发过帖子,因为api中已经说了:ListFileOptionsrecursion属性:返回当前目录下满足过滤要求的文件名及文件夹名。

更多关于HarmonyOS鸿蒙Next中使用listFile时会将非图片类型也获取到的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


我的解决办法是:suffix、mimeType、displayName 三个属性一起用,其实如果你的名称确保都是.png结尾的话,只使用displayName: [ ‘*.png’ ] 也可以。

在HarmonyOS Next中,使用listFile获取目录文件时会返回所有文件类型。若需仅获取图片文件,可通过文件扩展名过滤。示例代码:

import fileio from '@ohos.fileio';

let dir = fileio.opendir(path);
let entry;
while ((entry = dir.readSync()) !== undefined) {
  if (entry.name.endsWith('.jpg') || 
      entry.name.endsWith('.png')) {
    // 处理图片文件
  }
}
dir.closeSync();

支持过滤的图片扩展名包括.jpg/.png/.webp等,根据实际需求调整判断条件。

在HarmonyOS Next中,listFile方法默认会返回目录下所有文件和子目录。要仅获取图片文件,需要结合文件过滤器和后缀名检查。建议修改代码如下:

  1. 使用FileFilter进行过滤:
File[] imageFiles = dir.listFiles((file) -> {
    String name = file.getName().toLowerCase();
    return name.endsWith(".jpg") || name.endsWith(".png") || name.endsWith(".jpeg");
});
  1. 如果仍获取到其他目录,可能是路径问题,建议:
  • 检查dir路径是否正确
  • 确保只扫描目标目录,不递归子目录
  • 添加isFile()判断:file.isFile() && (name.endsWith(".jpg")...)
  1. 对于更精确的控制,可以使用Files.walk()配合过滤条件。
回到顶部