【问题标题】:IntelliJ txt file doesn't get included when building jar file [duplicate]构建 jar 文件时不包含 IntelliJ txt 文件 [重复]
【发布时间】:2021-01-18 13:35:58
【问题描述】:

我正在尝试将我的项目构建为 jar 文件。当我第一次打开 jar 文件时,我发现什么也没发生。然后我从 cmd 启动了 jar 文件。然后我看到它抛出一个错误,因为它找不到 txt 文件。这是错误:

在 IntelliJ 中执行程序工作正常,所以我假设 txt 文件不包含在工件中。这就是我在代码中使用txt文件的方式:

这是我的文件结构:

这是我的工件设置的样子:

我尝试将 txt 文件放入 src 文件夹并手动将其包含在工件设置中,我尝试将 txt 文件放入资源文件夹(它被标记为资源根目录),我尝试使用资源文件夹并手动将资源文件夹添加到工件设置(这是我尝试的最后一件事,在我的工件设置图片中可见)。

我真的很困惑为什么 txt 文件似乎不在 jar 文件中。任何帮助将不胜感激。

【问题讨论】:

    标签: java intellij-idea


    【解决方案1】:

    将文件放在resources 文件夹中,而不是File 尝试使用getResourceAsStream 来获取文件的内容:

    InputStream in = getClass().getResourceAsStream("/data.txt");
    Scanner pathScanner = new Scanner(in);
    

    【讨论】:

    • 谢谢你的作品!但是我忘了提到,在代码的另一部分我也使用了 data.txt 文件,但在这里我不读取它,而是像这样写入它: File pathFile = new File("resources/data.txt"); FileWriter pathWriter = new FileWriter(pathFile);如何使用 InputStream 进行这项工作?
    • 所以你问错了问题。它应该是“我无法从 jar 中读取 txt 文件”而不是“不包含该文件。”。你知道 jar 文件只是一个可以打开和检查的 zip 文件吗?
    • @SurfMan 我问错了问题,因为我不知道发生了什么。我知道一些基本的java并试图将它编译成一个jar文件。与此同时,我发现您无法更改 jar 文件,因此您必须将数据存储在其他地方。
    • @BorekBandell 您可以尝试将文件注入到 jar 中,如下所示:<jar-path>.jar -C resources data.txt。不确定这是否适合您的用例,但它在某些情况下使用,例如您在服务器上有一个配置文件,并且您需要您的 jar 来使用那里的这些值
    • 对于您的问题,要写入文件,您不需要InputStream,而是OutputStream。此外,请确保在完成后关闭这些流。 @BorekBandell
    【解决方案2】:

    确保在编译器选项中将?*.txt 设置为资源模式。

    【讨论】:

    • 对我来说它不包含 .txt 所以我添加了它。然后我尝试运行 jar 文件,但现在我得到一个 no main manifest attribute 错误,即使我确实选择了一个主类。编辑:没关系我再次尝试创建工件,现在这个错误消失了。我仍然看到原来的错误。
    猜你喜欢
    • 2011-06-12
    • 1970-01-01
    • 1970-01-01
    • 2013-07-15
    • 2023-02-12
    • 1970-01-01
    • 1970-01-01
    • 2011-04-20
    • 2021-12-28
    相关资源
    最近更新 更多