Jar文件无法将文件写入本地机器
Jar file can't write files to local machine
我知道 Java 小程序对于它们可以访问和不能访问的内容有很多限制,但我认为 JAR 是不同的。作为记录,我是 JAR 文件等方面的新手。
我已经为数据输入工具编写了一个 GUI,我希望能够将格式化的数据写入文本文件。当程序来自 Eclipse 运行 时,这有效。但是,一旦打包到 JAR 文件中,我就无法再让写入文件的部分工作了。也不报错。
这里没有一行代码可以分享,但程序基本上允许用户做的是:
- 看数据sheet
- 将数据转换为 GUI 中的文本字段
- 单击保存并在我选择的目录中生成一个包含此数据的文本文件
最后一步是我的 运行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 中写入吗?
我知道 Java 小程序对于它们可以访问和不能访问的内容有很多限制,但我认为 JAR 是不同的。作为记录,我是 JAR 文件等方面的新手。
我已经为数据输入工具编写了一个 GUI,我希望能够将格式化的数据写入文本文件。当程序来自 Eclipse 运行 时,这有效。但是,一旦打包到 JAR 文件中,我就无法再让写入文件的部分工作了。也不报错。
这里没有一行代码可以分享,但程序基本上允许用户做的是:
- 看数据sheet
- 将数据转换为 GUI 中的文本字段
- 单击保存并在我选择的目录中生成一个包含此数据的文本文件
最后一步是我的 运行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 中写入吗?