java读取jar包内的文件

首先介绍怎么把资源文件打包到可执行jar包中

打开eclipse,在你Java项目下建立一个资源文件夹res,然后在里面放入要打包到可执行jar包中的文件(我这里是JSTest.html),如下图所示:


这样等我们打包成可执行jar包时,JSTest.html被放到jar包里面的根目录下:

读取jar包中的文件

那么我们怎么在JSTest类中读取jar包中的这个JSTest.html文件呢,使用下面的代码即可获取包内文件的InputStream实例。后面就跟读取普通文件一样了。

1
InputStream inputStream = JSTest.class.getResourceAsStream("/JSTest.html");

完整代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package js.test;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

public class JSTest
{
public static void main(String[] args)
{
InputStream inputStream = JSTest.class.getResourceAsStream("/JSTest.html");

try
{
BufferedReader reader = new BufferedReader(
new InputStreamReader(inputStream, "UTF-8"));
StringBuilder builder = new StringBuilder();
char[] charArray = new char[200];
int number = -1;
while ((number = reader.read(charArray)) != -1)
{
builder.append(charArray,0,number);
}
System.out.println(builder.toString());

} catch (FileNotFoundException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}

}

}

JSTest.html文件内容:

1
2
3
4
5
6
7
8
<html>
<head>
<meta charset="utf-8">
</head>
<body>

</body>
</html>

然后我们打包成可执行jar包,运行该可执行jar包即可读取它自己包内的JSTest.html文件:

可以看到,已经成功把JSTest.html中的内容输出到控制台了。

读取jar包中资源文件子目录中的文件

如下图所示,如果想读取资源目录res下的子目录son中的文件inside.txt。

只需要把上面的代码改成即可:

1
InputStream inputStream = JSTest.class.getResourceAsStream("/son/inside.txt");

其他的代码不用改动。打包成可执行jar包红,inside.txt在jar包中的位置:

运行可执行jar包:

同样运行成功。