如何使用 Scanner 检查 JAVA 中是否有 CSV 压缩的 Zip 文件或其他类型的文件?

How to user Scanner check if a Zip file compressed by CSV or other type of files in JAVA?

我正在尝试使用 Scanner 逐行读取 ZipInputStream,下面是我的代码

                    ZipInputStream inputStream = new ZipInputStream(bodyPartEntity.getInputStream());
                    inputStream.getNextEntry();
                    Scanner sc = new Scanner(inputStream);
                    while (sc.hasNextLine()) {
                        log.info(sc.nextLine());
                    }

而且效果很好。

但我有一个问题,如果用户将图像或不同类型的文件(不是 CSV)压缩为 Zip 怎么办。有没有一种方法可以检查它以便为它抛出异常?另外,有没有办法读取 next file?

目前,如果我压缩了多个文件,我只能读取一个。然后 sc.hasNextLine() 将等于 false。

无论如何,我可以阅读下一个文件吗?

您应该像这样遍历您的 zip 文件:

ZipEntry entry;
while((entry = inputStream.getNextEntry())!=null){
  // do your logic here...
  // for example: entry.getName()
}

对于文件类型,您可以在 while 循环内使用类似这样的内容:

MimetypesFileTypeMap mtft = new MimetypesFileTypeMap();
String mimeType = mtft.getContentType(entry.getName());
System.out.println(entry.getName()+" type: "+ mimeType);

编码愉快!

首先,您需要按照之前的建议遍历 zip。

然后你需要用Apache Tika检查文件的类型。如果您需要确定文件的类型,我认为这是最好的库。它还可以从文件扩展名和文件内容中检测文件类型。使用文件内容是最安全的方案,最适合你的场景(流)。

在此处查看更多信息: