簡體   English   中英

讀取jar文件中的目錄

[英]Read a directory in a jar file

一直試圖讓這一整天工作,但它總是返回錯誤,即使經過我所做的所有研究,我仍然無能為力

這是方法,當前返回錯誤的行是

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();
    }
}

我所知道的是,這些東西需要被視為資源,但是我不確定我需要改變什么,我確定我做了所有必要的改變但是它仍然沒有工作

任何幫助贊賞

編輯:

我一直在搞亂這個,這是一個似乎工作得很好的新方法,除了它無法閱讀

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();
    }
}

不知道我怎么想讀它(現在我的閱讀評論了)任何線索?

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

然后將該URL轉換為文件是錯誤的。 它可能是指向遠程位置的JAR內部的URL。

您可以嘗試以下代碼:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM