【问题标题】:Jar file can't write files to local machineJar文件无法将文件写入本地机器
【发布时间】:2015-05-19 02:18:21
【问题描述】:

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

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

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

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

最后一步是我的可运行 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();
                }
            }
        }
    }
}

【问题讨论】:

  • 不,没有限制。如果您详细说明“让我失望”是什么意思,我们可以提供进一步的帮助。
  • @m0skit0 谢谢——我刚才在我的问题编辑中详细说明了
  • eclipse 使用什么方法写入文件?你在做 I/O 重定向吗?文件编写器?序列化?
  • @Aify java.nio.file.Files 和 java.nio.file.Path
  • 您应该调试并检查文件的完整路径。 Eclipse 有不同的运行环境,所以有时路径是不同的。我知道你“检查”了它,但在运行时再次检查你正在编写的文件的真实值。

标签: java jar executable-jar


【解决方案1】:

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

在 Eclipse 中打包 JAR 文件时,我选择了“将所需的库打包到生成的 JAR 中”。这给了我问题。

再次尝试时,我选择了“将所需的库提取到生成的 JAR 中”。这样就解决了问题。

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

【讨论】:

    猜你喜欢
    • 2012-12-08
    • 2017-06-08
    • 1970-01-01
    • 2014-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-06
    相关资源
    最近更新 更多