本文介紹了如何檢查JAR文件是否有效?的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
My WebApp允許用戶上傳JAR文件。但是,上載JAR文件后,它會被損壞。我已經通過比較上傳文件(Winmd5free)前后的MD5校驗和來驗證這一點。
上傳的JAR文件與原始JAR文件幾乎相同:
文件大小與原始文件相似(以KB為單位)
我可以使用解壓程序打開上傳的JAR文件并查看其內容(資源和類文件),與原始文件相比一切都是一樣的
當我打開上傳的JAR文件(使用記事本++)時,我確實注意到二進制內容與原始內容不同。此外,當我使用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());
}
此外,當我雙擊JAR(Windows)時,我得到以下消息。
錯誤:Jarfile無效或損壞
我的問題是:
有沒有辦法以編程方式檢查JAR文件是否有效?我本希望JarInputStream
立即檢測到這一點,但它根本沒有顯示任何問題
當我在Windows中雙擊JAR文件時,是不是是java.exe向我顯示了無效或損壞的JAR文件消息?
當無效的JAR文件作為類路徑的一部分傳入時,為什么沒有拋出錯誤/異常?例如,運行java -cp uploaded.jar;libs* com.some.class.Test
命令?
這個問題與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)
推薦答案
以編程方式檢測無效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();
}
}
如果JAR文件無效,則實例化ZipFile
對象時將拋出ZipException
。
這篇關于如何檢查JAR文件是否有效?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,