[Java] 在 jar 文件中读取 resources 目录下的文件

注意两点:

1. 将资源目录添加到 build path,确保该目录下的文件被拷贝到 jar 文件中。

2. jar 内部的东西,可以当作 stream 来读取,但不应该当作 file 来读取。

 

例子

 

新建一个 maven 目录

App.java 用于读取 resources 中的 a.txt 内容。

a.txt 是被读取的资源文件。

grs@grs App $ tree
.
├── pom.xml
├── src
│   ├── main
│   │   ├── java
│   │   │   └── tony
│   │   │       └── App
│   │   │           └── App.java
│   │   └── resources
│   │       └── a.txt

 


把资源目录添加到 build path 中

项目右击 -> properties -> Java Build Path -> Source -> 把 resources 目录添加到 build path 中。

如果没有添加到 build path 中,导出为一个 Runnable JAR 文件后,运行会报错 Exception in thread "main" java.lang.NullPointerException,解压 jar 后会发现,a.txt 文件没有存在于 jar 文件中。

把 resources 加入到 build path ,使得 resources 目录的文件被包含在 jar 的内部首层路径中。解压 jar ,目录结构如下:

grs@grs app.jar $ tree
.
├── META-INF
│   └── MANIFEST.MF
├── a.txt
└── tony
    └── App
        └── App.class

 

代码实现

将 resources 目录设置为 build path 后, a.txt 文件被拷贝到 jar 的首层,所以采用 /a.txt 路径读取。采用 stream 方式读取,确保能读到打包成 jar 内部资源的文件。

package tony.App;

import java.io.IOException;
import java.io.InputStream;

public class App 
{
    public static void main( String[] args ) throws Exception
    {
        System.out.println( "Hello World! --- " );
        App app = new App();
        app.readResources();
    }
    
    public void readResources() throws IOException{
        InputStream is = this.getClass().getResourceAsStream("/a.txt");
        System.out.println((char)is.read());
        is.close();
    }
}

 

 

转载于:https://www.cnblogs.com/TonyYPZhang/p/6298422.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值