2015-06-12 257 views
2

在我的應用程序中,我必須讀取磁盤位置中可用的jar文件,並從jar中分離.classes文件。從資源位置讀取jar文件

代碼是

 JarFile jarFile = new JarFile("./resources/CD.jar"); 

    for(Enumeration<JarEntry> em = jarFile.entries(); em.hasMoreElements();) { 
     String s= em.nextElement().toString(); 
     ZipEntry entry = jarFile.getEntry(s); 

     String fileName = s.substring(s.lastIndexOf("/")+1, s.length()); 
     if(fileName.endsWith(".class")){ 
      System.out.println(fileName); 
     } 

但我得到一個錯誤

java.io.FileNotFoundException: .\resources\CD.jar (The system cannot find the path specified). 
+0

**你是什麼意思**隔離**?你的意思是說你只想在'.jar'文件中列出文件名,或者你想做其他的事情?我可以看到您的代碼只顯示名稱 – mustangDC

+0

嘗試添加文件的完整路徑。 – nom

+0

我想列出jar中的.classes文件。 – ANP

回答

0

你嘗試添加CD.jar文件在類路徑?我會盡力做一次。

+0

我不認爲這會有什麼區別。 – nom

+0

這個jar文件不在我的類路徑中。外部服務把這個文件放在這個位置 – ANP

0

".\resources\CD.jar"更改爲完全限定的URI。例如:C:\Users\Whoever\Documents\resources\CD.jar

+0

但是它不會爲一般目的而工作,那就是如果我想在Linux機器上運行我的應用程序,我必須更改代碼。不是嗎? – ANP

+0

@ANP正確。解決這個問題的方法是將'cd.jar'保存在與應用程序相同的文件夾中。 – nom

0

在這裏,我找到了解決我的問題。 1.將'resourc'e位置添加到類路徑 2.允許外部服務API將cd.jar放置在資源位置 3.使用子類裝入器將cd.jar添加到類路徑 代碼片段在下面給出:

URLClassLoader childLoader = new URLClassLoader(new URL [] {getURLOfTestclass()},this.getClass()。getClassLoader());

URL url = getClass()。getClassLoader()。getResource(「CD.jar」); 返回網址;