Maven项目在IDE可读取资源文件,打包成JAR后无法读取求助
Maven项目打包JAR后无法读取resources资源的问题解决
问题根源
你当前用File类读取资源的方式只适用于文件系统中的真实文件。IDE运行时,resources目录下的文件会被解压到项目编译后的输出目录(比如target/classes),此时是真实的文件路径,所以File能找到;但打包成JAR后,test.txt是JAR归档文件里的一个条目,不是独立文件,File类无法识别这种JAR内部的路径,自然会抛出FileNotFoundException,最终返回null。
修复方案
改用ClassLoader.getResourceAsStream()直接获取资源的输入流,这个方法可以统一处理IDE运行和JAR打包两种场景,无需关心资源的物理存储方式。修改后的代码如下:
import java.io.IOException; import java.io.InputStream; import java.util.Scanner; public class Main { public static void main(String[] args) { Main mainTest = new Main(); System.out.println(mainTest.test()); } private String test() { // 直接获取资源的输入流 try (InputStream is = getClass().getClassLoader().getResourceAsStream("test.txt"); Scanner scanner = new Scanner(is)) { if (is == null) { System.err.println("找不到test.txt资源"); return null; } String line = ""; while (scanner.hasNextLine()) { line = scanner.nextLine(); } return line; } catch (IOException e) { // 打印异常信息方便调试 e.printStackTrace(); } return null; } }
额外注意点
- 原代码中
catch块里只调用了e.getMessage()但没有做任何输出,导致异常发生时你看不到错误信息,建议改成e.printStackTrace()或者记录日志,方便排查问题。 - 要确保
test.txt确实被打包进了JAR包:Maven默认会把src/main/resources下的文件打包到JAR的根目录,如果你修改过Maven的资源配置,需要检查pom.xml里的<resources>配置是否正确。
内容的提问来源于stack exchange,提问作者Valloyd
相关产品推荐
相关产品推荐

