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ğ
相关产品推荐
相关产品推荐

