Jan*_*yne 11 java jar classpath java-ee
我的webapp允许用户上传jar文件.但是,上传jar文件后,它已损坏.我通过比较md5校验和(winmd5free)来验证这一点.
上传的jar文件看起来"正常"和"正确"
当我打开上传的jar文件(使用Notepad ++)时,我注意到二进制内容与原始内容不同.另外,当我使用JarInputStream读取jar条目时,没有条目.
JarInputStream is = new JarInputStream(new FileInputStream(new File("uploaded.jar")));
JarEntry entry = null;
while(null != (entry = is.getNextJarEntry())) {
System.out.println(entry.getName());
}
Run Code Online (Sandbox Code Playgroud)
此外,当我双击jar(Windows)时,我收到以下消息.
错误:jarfile无效或损坏
我的问题是
请注意,这与jar签名和/或检查jar的签名无关.它只是检查一个文件(上传与否)是否是一个有效的jar文件(不一定是jar的类文件是有效的,因为已经有关于这个问题的另一个SO帖子).
跑步的结果
jar -tvf uploaded.jar
java.util.zip.ZipException: error in opening zip file
at java.util.zip.ZipFile.open(Native Method)
at java.util.zip.ZipFile.<init>(ZipFile.java:127)
at java.util.zip.ZipFile.<init>(ZipFile.java:88)
at sun.tools.jar.Main.list(Main.java:977)
at sun.tools.jar.Main.run(Main.java:222)
at sun.tools.jar.Main.main(Main.java:1147)
Run Code Online (Sandbox Code Playgroud)
以编程方式检测无效jar文件的方法是使用java.util.ZipFile.
public static void main(String[] args) {
if(args.length < 1) {
System.err.println("need jar file");
return;
}
String pathname = args[0];
try {
ZipFile file = new ZipFile(new File(pathname));
Enumeration<? extends ZipEntry> e = file.entries();
while(e.hasMoreElements()) {
ZipEntry entry = e.nextElement();
System.out.println(entry.getName());
}
} catch(Exception ex) {
ex.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
如果jar文件无效,则在实例化ZipFile时将抛出ZipException.
| 归档时间: |
|
| 查看次数: |
20434 次 |
| 最近记录: |