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

server/2025/1/11 19:27:16/

在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"; // 注意路径前的斜杠// 获取资源文件的URItry {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();}}
}

http://www.ppmy.cn/server/157556.html

相关文章

【微服务】6、限流 熔断

线程隔离与容错处理 本视频主要讲解了在购物车业务中&#xff0c;因商品微服务响应慢导致的问题及解决方案&#xff0c;重点介绍了线程隔离后查询购物车业务不可用的情况&#xff0c;以及如何通过Fallback逻辑进行缓解&#xff0c;包括配置Feign调用为簇点资源、添加Fallback逻…

【Spring Boot 应用开发】-04 自动配置-数据源

深入讲解 Spring Boot 自动配置中的数据源配置 为了更好地理解 Spring Boot 中的自动配置机制&#xff0c;我们以数据源配置机制为例&#xff0c;按照以下顺序进行讲解&#xff1a; 不使用任何框架来连接数据源的方式使用 Spring MVC 连接数据源的方式使用 Spring Boot 自动配…

bash相关习题复习

1、由于 ~/.bash_history 仅能记录指令&#xff0c;我想要在每次注销时都记录时间&#xff0c;并将后续的指令 50 笔记录下来&#xff0c; 可以如何处理&#xff1f; [rootptivitic ~]# vim ~/.bash_logout date >> ~/.myhistory history 50 >> ~/.myhistory 2…

conntrack iptables 安全组

centos 安装yum install conntrack-tools 1. conntrack状态 NEW: 新建连接&#xff08;第一次包&#xff09;。 ESTABLISHED: 已建立连接&#xff0c;正在传输数据。 RELATED: 与已有连接相关的连接&#xff0c;如 FTP 数据连接。 INVALID: 无效连接&#xff0c;无法识别或不…

计算机网络之---网络层的基本功能

网络层简述 网络层&#xff08;Network Layer&#xff09;是OSI&#xff08;开放系统互联&#xff09;模型的第三层&#xff0c;主要负责将数据包从源主机传输到目的主机&#xff0c;处理数据传输过程中的路由选择、寻址和分段等任务。网络层的主要目的是确保数据能够从源设备准…

软考中级 软件设计师 第一章 第一节 数据的表示

目录 1、 进制转换 1.1、基础转换 1.2、二进制与八进制与十六进制 1.2.1、二进制与八进制 1.2.2、二进制与十六进制 2、码制 2.1、原码/反码/补码/移码 2.2、数值范围 3、浮点数 3.1、浮点数的表示 3.2、特点 3.3、对阶 4、运算 4.1、关系运算符 4.2、逻辑运算符…

Gin 框架中间件原理

一、引言 在现代 Web 应用开发中&#xff0c;中间件扮演着至关重要的角色。Gin 作为一个流行的 Go 语言 Web 框架&#xff0c;其强大的中间件功能使得开发者能够高效地处理各种通用任务&#xff0c;如日志记录、身份验证、错误处理等。理解 Gin 框架中间件的原理&#xff0c;不…

vue3+element-plus暗黑模式切换动画圆弧过渡

vue3element-plus暗黑模式切换动画圆弧过渡 效果 html <div class"toggle" ref"switchRef" click.stop"toggleDark()"><el-icon v-show"!isDark" :size"30"><Moon /></el-icon><el-icon v-sh…