Jar文件无法将文件写入本地机器

Jar file can't write files to local machine

我知道 Java 小程序对于它们可以访问和不能访问的内容有很多限制,但我认为 JAR 是不同的。作为记录,我是 JAR 文件等方面的新手。

我已经为数据输入工具编写了一个 GUI,我希望能够将格式化的数据写入文本文件。当程序来自 Eclipse 运行 时,这有效。但是,一旦打包到 JAR 文件中,我就无法再让写入文件的部分工作了。也不报错。

这里没有一行代码可以分享,但程序基本上允许用户做的是:

  1. 看数据sheet
  2. 将数据转换为 GUI 中的文本字段
  3. 单击保存并在我选择的目录中生成一个包含此数据的文本文件

最后一步是我的 运行nable JAR 让我失望的地方。我单击保存,我的对话框出现了,但当我检查输出文件夹时,没有生成任何文件。注意:这与不正确的路径无关——我已经检查过了。正如我上面所说,它在 Eclipse 中有效。

我缺少某些限制吗?理想情况下,我能够与其他几个人共享此可执行文件以分担数据输入任务。是否有另一种格式来打包该程序,使其能够运行? (我在这上面花了很长时间,想让它在 Java 中发挥作用)

下面是保存按钮的 ActionListener。这就是魔法应该发生的地方:

class WriteToFileListener implements ActionListener
{
    public void actionPerformed(ActionEvent event)
    {
        String command = event.getActionCommand();
        if (command.equals(strWriteToFile)){
            System.out.println(strWriteToFile);
            int warning = JOptionPane.showOptionDialog(frame, "Text",
                    "Text", JOptionPane.OK_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE, null, null, null);
            if (warning == 0)
            {
                Path path = Paths.get(tfOutputDir.getText() + "\" + tfFileName.getText() + ".txt");
                ArrayList<String> output = new ArrayList<String>();
                for (String s : tmp.items)
                {
                    output.add(s);
                }

                try {
                    Files.write(path, output);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

好吧,我想我自己的问题确实有了答案,但我真的不明白为什么:

在 Eclipse 中打包 JAR 文件时,我选择了 "Package required libraries into generated JAR." 这给了我问题。

再次尝试时,我选择了"Extract required libraries into generated JAR."解决了问题。

这两个选项之间的区别有很好的解释here,但我不明白为什么这会影响我的保存能力。也许@m0skit0 对路径有意见?它可能一直在尝试在 JAR 中写入吗?