java中 如何从jar中读取资源文件?

在Java中,从JAR文件中读取资源文件通常使用类加载器(ClassLoader)或者通过getClass().getResourceAsStream()方法。以下是几种常见的方法:

方法一:使用 getClass().getResourceAsStream()

这是最常见和推荐的方法,因为它简单且易于理解。

java 复制代码
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

public class ReadResourceFile {
    public static void main(String[] args) {
        // 假设资源文件名为 "config.properties",并且位于资源根目录
        String resourceName = "config.properties";
        
        // 使用类加载器获取资源文件的输入流
        try (InputStream inputStream = ReadResourceFile.class.getResourceAsStream(resourceName);
             BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream))) {

            if (inputStream == null) {
                System.out.println("Resource not found: " + resourceName);
                return;
            }

            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

方法二:使用 ClassLoader.getResourceAsStream()

你也可以直接使用类加载器来获取资源文件的输入流。

java 复制代码
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

public class ReadResourceFile {
    public static void main(String[] args) {
        // 假设资源文件名为 "config.properties",并且位于资源根目录
        String resourceName = "config.properties";
        
        // 获取当前类的类加载器
        ClassLoader classLoader = ReadResourceFile.class.getClassLoader();
        
        try (InputStream inputStream = classLoader.getResourceAsStream(resourceName);
             BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream))) {

            if (inputStream == null) {
                System.out.println("Resource not found: " + resourceName);
                return;
            }

            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

方法三:使用 Files.readAllLines (Java 7+)

如果你使用的是Java 7或更高版本,并且资源文件是文本文件,可以使用java.nio.file.Files类来读取文件内容。不过,请注意,这种方法通常用于文件系统路径,而不是JAR中的资源路径。对于JAR中的资源,还是推荐使用前两种方法。

java 复制代码
import java.io.IOException;
import java.net.URISyntaxException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;

public class ReadResourceFile {
    public static void main(String[] args) {
        // 假设资源文件名为 "config.properties",并且位于资源根目录
        String resourceName = "/config.properties"; // 注意路径前的斜杠
        
        // 获取资源文件的URI
        try {
            List<String> lines = Files.readAllLines(Paths.get(ReadResourceFile.class.getResource(resourceName).toURI()));
            for (String line : lines) {
                System.out.println(line);
            }
        } catch (IOException | URISyntaxException e) {
            e.printStackTrace();
        }
    }
}
相关推荐
用户094248568032 分钟前
第3章:OpenJDK从源码到字节码——Class 文件与 javac 管线
java·jvm
azhou的代码园10 分钟前
基于RFM模型的中小型企业客户管理系统
java·人工智能·spring boot·毕业设计
君顾125 分钟前
酒吧点餐小程序系统开发实战:从架构设计到上线全流程指南
java·开发语言·酒吧
子非鱼a41 分钟前
【WEB】[SWPU2019]Web1
java·服务器·前端
花生了什么事o1 小时前
自定义Spring Boot Starter全流程
java·spring boot·后端
torpidcat2 小时前
ruoyi-vue-pro 若依芋道 java springboot +mybatis 生日查询相关
java·vue.js·spring boot
AC赳赳老秦2 小时前
文旅市场公开数据分析:基于 OpenClaw 采集景区客流与门票公示数据,生成区域文旅热度监测报告
java·c语言·python·php·symfony·deepseek·openclaw
我命由我123453 小时前
Windows 操作系统 - 启用 D 盘虚拟内存
java·运维·服务器·windows·学习·java-ee·运维开发
xcl09253 小时前
智慧场馆解决方案系统源码:从架构设计到部署实战
java·spring boot
liangbo73 小时前
06-JVM垃圾回收器之CMS
java·jvm