如何使用 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检查文件的类型。如果您需要确定文件的类型,我认为这是最好的库。它还可以从文件扩展名和文件内容中检测文件类型。使用文件内容是最安全的方案,最适合你的场景(流)。
在此处查看更多信息:
我正在尝试使用 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检查文件的类型。如果您需要确定文件的类型,我认为这是最好的库。它还可以从文件扩展名和文件内容中检测文件类型。使用文件内容是最安全的方案,最适合你的场景(流)。
在此处查看更多信息: