在jar文件中访问文件?

我需要能够访问存储在已编译的jar文件中的文件。 我已经想出如何将文件添加到项目中,但是我将如何在代码中引用它? 我如何将文件从jar文件复制到用户硬盘上的某个位置? 我知道有很多方法可以访问文件(FileInputStream,FileReader,等等),但我不知道如何查看自己。

你可以使用这样的东西:

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

如果foo.txt位于JAR文件的根目录中,则使用:

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

我相信,假设该类与资源位于同一个JAR文件中。

您可以使用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(); } 

您可以使用getResource()获取类路径上的文件的URL,或使用getResourceAsStream()来获取InputStream。

例如:

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

只是想添加,如果我们想要访问位于以下路径的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所需的一切都在那里。