我想识别我的存档是 zip
还是 rar
。但是在我验证我的文件之前我遇到了运行时错误的问题。我想创建自定义通知:
public class ZipValidator {
public void validate(Path pathToFile) throws IOException {
try {
ZipFile zipFile = new ZipFile(pathToFile.toFile());
String zipname = zipFile.getName();
} catch (InvalidZipException e) {
throw new InvalidZipException("Not a zip file");
}
}
}
目前我有运行时错误:
java.util.zip.ZipException: error in opening zip file
最佳答案
我建议打开一个普通的 InputStream 并读取前几个字节(魔术字节)并且不要依赖文件扩展名,因为这很容易被欺骗。此外,您可以省略创建和解析文件的开销。
对于 RAR,第一个字节应该是 52 61 72 21 1A 07。
对于 ZIP,它应该是以下之一:
- 50 4B 03 04
- 50 4B 05 06(空存档)
- 50 4B 07 08(跨区归档)。
来源:https://en.wikipedia.org/wiki/List_of_file_signatures
还有一点,刚看了你的代码:
为什么要捕获 InvalidZipException,将其丢弃并构造一个新异常?这样你就失去了原始异常的所有信息,使得调试和理解到底出了什么问题变得困难。要么根本不捕获它,要么,如果你必须包装它,就正确地做:
} catch (InvalidZipException e) {
throw new InvalidZipException("Not a zip file", e);
}
关于java - 如何在java中识别一个zip文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33934178/