簡體   English   中英

在jar文件中訪問文件?

[英]Access file in jar file?

我需要能夠訪問存儲在已編譯的jar文件中的文件。 我已經想出了如何將文件添加到項目中,但是如何在代碼中引用它? 我如何將文件從jar文件復制到用戶硬盤上的某個位置? 我知道有很多方法可以訪問文件(FileInputStream,FileReader等),但我不知道如何查看自己。

你可以使用這樣的東西:

InputStream is = this.getClass().getClassLoader().getResourceAsStream(fileFromJarFile);

如果foo.txt位於JAR文件的根目錄中,則使用:

InputStream is = this.getClass().getClassLoader().getResourceAsStream("foo.txt");

假設該類與資源位於同一個JAR文件中,我相信。

您可以使用getResource()獲取類路徑上的文件的URL,或使用getResourceAsStream()來獲取InputStream。

例如:

BufferedReader reader = new BufferedReader(new InputStreamReader(
    this.getClass().getResourceAsStream("foo.txt")));

您可以使用JarFile類讀取JAR文件的內容。

以下是如何從JAR文件中獲取特定文件並將其解壓縮的示例:

JarFile jar = new JarFile("foo.jar");
String file = "file.txt";
JarEntry entry = jar.getEntry(file);
InputStream input = jar.getInputStream(entry);
OutputStream output = new FileOutputStream(file);
try {
    byte[] buffer = new byte[input.available()];
    for (int i = 0; i != -1; i = input.read(buffer)) {
        output.write(buffer, 0, i);
    }
} finally {
    jar.close();
    input.close();
    output.close();
}

只是想添加,如果我們想要訪問位於以下路徑的Jar內的文件:

Windows:  
c:\your-jar-file.jar\dir1\dir2\dir3\foo.txt

Linux: 
/home/your-jar-file.jar/dir1/dir2/dir3/foo.txt

將需要使用以下代碼(注意在路徑的開頭沒有 “/”(正斜杠)字符):

InputStream is = this.getClass().getClassLoader().getResourceAsStream("dir1/dir2/dir3/foo.txt");

看看JarFile類。 獲取jar文件中特定條目的InputStream所需的一切都在那里。

暫無
暫無

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

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