zoukankan      html  css  js  c++  java
  • [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();
        }
    }
  • 相关阅读:
    第三周进度条
    团队作业个人博客05
    团队作业个人博客04
    用户分析,场景分析
    团队作业个人博客03
    团队作业个人博客02
    团队作业个人博客01
    第四周进度条
    第三周进度条
    四则运算2
  • 原文地址:https://www.cnblogs.com/TonyYPZhang/p/6298422.html
Copyright © 2011-2022 走看看