如何选择指定的文件类型?

画夕颜 2020-05-08 04:07:17
我想做一个扫描本地文件的软件,然后我想实现文件筛选功能,比如只扫描图片类型文件、只扫描文本文档、只扫描exe文件等等,最简单的做法是指定文件后缀,但是那样有很大局限性,我不可能把所有可能的后缀全部写出来,那样太繁琐了!有没有其他的方法可以实现?
...全文
380 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
捏造的信仰 2020-05-14
  • 打赏
  • 举报
回复
你必须自己收集文件类型,网上有很多资料可以找,比如维基百科 https://en.wikipedia.org/wiki/List_of_file_formats
android_cai_niao 2020-05-14
  • 打赏
  • 举报
回复
气死我了,上才艺!! 思路:不想写所有的扩展名(后缀),那就得知道要扫描的目录中的文件都有哪些扩展名,有哪些就展示哪些。所以解决方案就是: 1、获取到指定目录的所有文件 2、把所有文件按扩展名进行分类 3、根据分类拿到所有扩展名 4、拿到某个分类下的所有文件

/** 获取dir目录下的所有文件,并保存到files集合中 */
    private static void getAllFile(File dir, List<File> files) {
        File[] fileArr = dir.listFiles();
        if (fileArr == null || fileArr.length == 0) return;
        for (int i = 0; i < fileArr.length; i++) {
            File file = fileArr[i];
            if (file.isFile()) {
                files.add(file);
            } else {
                getAllFile(file, files);
            }
        }
    }

    /** 对files集合中的文件进行分类,以文件的扩展名进行分类 */
    private static Map<String, List<File>> getFileCategory(List<File> files) {
        return files.stream().collect(Collectors.groupingBy(file -> {
            String suffix;
            String fileName = file.getName();
            if (fileName.contains(".")) {
                suffix = fileName.substring(fileName.lastIndexOf(".") + 1);
            } else {
                suffix = "";
            }
            return suffix;
        }));
    }


    public static void main(String[] args) throws Exception {
        File dir = new File("C:\\Users\\abczh\\Desktop");
        List<File> files = new ArrayList<>();
        // 拿到dir目录下所有的文件
        getAllFile(dir, files);
        // 按扩展名进行类型,key为扩展名,value为该扩展名对应的文件
        Map<String, List<File>> fileCategoryMap = getFileCategory(files);
        // 打印所有的扩展名
        fileCategoryMap.keySet().forEach(System.out::println);
        // 打印所有.txt的文件
        fileCategoryMap.get("txt").forEach(System.out::println);
    }
如果我的回答解决了你的问题,麻烦结一下帖子,给点积分,谢谢^_^
AntiCSD 2020-05-14
  • 打赏
  • 举报
回复
不想通过扩展名的区分文件类型的话,需要读取文件内容前几个字节,要自己分析各种文件类型。比如下面的图片格式
(v[0] = 255) and (v[1] = 216) == '.jpg';
(v[0] = 66) and (v[1] = 77) == '.bmp';
qq_39936465 2020-05-08
  • 打赏
  • 举报
回复
引用 楼主 画夕颜 的回复:
我想做一个扫描本地文件的软件,然后我想实现文件筛选功能,比如只扫描图片类型文件、只扫描文本文档、只扫描exe文件等等,最简单的做法是指定文件后缀,但是那样有很大局限性,我不可能把所有可能的后缀全部写出来,那样太繁琐了!有没有其他的方法可以实现?
enum文件 枚举使用了解一下,把所以需要扫描的后缀放入enum, 以后只要改动enum就行了。

62,612

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧