You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

IntelliJ中可读取TXT文件,打包为Jar后无法读取的解决方法

解决Jar包无法读取TXT文件的问题

问题原因

  • 在IntelliJ运行时,代码通过文件系统路径userDirectory + "/src/file.txt"访问文件,此时项目根目录下的src/file.txt确实存在于本地文件系统,所以能正常读取。
  • 打包成Jar后,src目录结构会被合并到Jar包内部,不存在独立的src文件夹,且Jar是压缩包,无法通过文件系统路径直接访问内部资源,因此原代码失效。

解决方案

1. 调整文件存放位置

将file.txt移动到项目的src/main/resources目录下(如果没有这个目录,手动创建)。IntelliJ会自动将该目录下的文件打包到Jar包的根目录中,确保文件被包含进Jar。

如果不想移动文件,可以在IntelliJ中右键点击src目录 → 选择Mark Directory as → Resources Root,这样src下的文件也会被当作资源打包。

2. 修改代码读取方式

使用类加载器读取Jar内部的资源,而不是文件系统路径:

// 替换YourClassName为你的实际类名
InputStream inputStream = YourClassName.class.getClassLoader().getResourceAsStream("file.txt");
if (inputStream == null) {
    throw new FileNotFoundException("未找到file.txt资源");
}
// 推荐用try-with-resources自动关闭资源
try (Scanner reader = new Scanner(inputStream)) {
    // 这里编写读取文件的逻辑
} catch (FileNotFoundException e) {
    e.printStackTrace();
}

关键说明

  • getResourceAsStream("file.txt")会从Jar包的根目录(或资源根目录)查找文件,无需带src前缀。
  • 必须处理inputStream == null的情况,避免空指针异常,这说明资源未被正确打包进Jar。

内容的提问来源于stack exchange,提问作者Yunus Gökdağ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 22:45:31