2012-03-26 133 views
0

一直試圖讓這個工作了一整天,但它總是返回錯誤,甚至在所有的研究,我已經做了我還是一無所知閱讀目錄中的jar文件

這裏的方法,這就是線目前有錯誤返回是

File file = new File(url.toURI()); 

我不能確定它是什麼,我必須做的,使其工作

public void preloadModelsTwo() { 
    String slash = System.getProperty("file.separator"); 
    try { 
     URL url = getClass().getResource("."+ slash +"Patches" + slash+"Models"+slash); 
     File file = new File(url.toURI()); 
     File[] fileArray = file.listFiles(); 
     for(int y = 0; y < fileArray.length; y++) { 
      String s = fileArray[y].getName(); 
      if (s != "") { 
       byte[] buffer = readFile("."+ slash +"Patches" + slash+"Models"+slash+""+s); 
       Model.method460(buffer, Integer.parseInt(getFileNameWithoutExtension(s))); 
       //System.out.println("Read model: " + s); 
      } 
     } 
    } catch (Exception E) { 
     System.out.println("error with secondary model screening"); 
     E.printStackTrace(); 
    } 
} 

所有我知道的是,東西需要處理作爲資源,但我不確定URE我需要改變的話,我敢肯定,我做了所有的neccessary變化但它仍然沒有工作

任何幫助表示讚賞

編輯:

我一直亂搞與此,這是,這似乎是相當不錯的了,除了新的方法,它無法讀取

public String removeNonDigits(String text) { 
    int length = text.length(); 
    StringBuffer buffer = new StringBuffer(length); 
    for(int i = 0; i < length; i++) { 
     char ch = text.charAt(i); 
     if (Character.isDigit(ch)) { 
      buffer.append(ch); 
     } 
    } 
    return buffer.toString(); 
} 

public JarEntry entry; 
public void preloadModelsTwo() { 
    String slash = System.getProperty("file.separator"); 
    try { 
JarFile jarFile = new JarFile("SilabGarza.jar"); 
for(Enumeration em = jarFile.entries(); em.hasMoreElements();) { 
    String s= em.nextElement().toString(); 
    if(s.contains(".dat")){ 
     entry = jarFile.getJarEntry(s); 
     InputStream input = jarFile.getInputStream(entry); 
     System.out.println("input = "+input); 
     //byte[] buffer = readFile(s); 
     String s2 = removeNonDigits(s); 
     //Model.method460(buffer, Integer.parseInt(s2)); 
     System.out.println("Found: "+s); 
     System.out.println("formd: "+s2); 

     input.close(); 
    } 
} 
jarFile.close(); 

    } catch (Exception E) { 
     System.out.println("error with secondary model screening"); 
     E.printStackTrace(); 
    } 
} 

不知道如何我想讀它(現在我已經讀註釋掉) 任何線索任何人?

+0

你能發佈你得到的錯誤嗎? – 2012-03-26 01:19:55

+0

它只是一個空指針異常導致501行(在它的url.toURI()行) – Travs 2012-03-26 01:28:38

+0

好吧。你有沒有檢查url的值是否爲空?你甚至可以檢查用於設置url的表達式的每個部分,以查看哪個部分爲空 – 2012-03-26 01:30:28

回答

2

在這裏使用File.separator是錯誤的。資源由URL標識,而不是文件名,URL只有正斜槓。

然後,您錯誤地將該URL轉換爲文件。它可能是一個URL,它指向遠程位置的JAR內部。

+0

請查看我剛剛應用到主帖子的編輯,希望這會更具信息性 – Travs 2012-03-26 03:32:15

+0

@TravisWhitmarsh'ZipEntry'有一個API。不要只是調用'toString()'並希望最好。它不讀取,因爲你不*閱讀*。你得到輸入流,但你只需關閉它。 'InputStream'也有一個API。 – EJP 2012-03-26 03:38:25

0

你可以試試下面的代碼:

URL url = getClass().getResource(/* resource name */); 
final URL resolve = org.eclipse.core.runtime.FileLocator.resolve(url); 
File file = new File(resolve.getPath()); 

編輯:哦,我剛看到,今天你urlnull。請記住getResource("resource name")classpath尋找資源。所以你的resource name應該是/package/path/of/resourceName.extenstion

例如/com/kjain/widget/identifier/views/view.jpg