Runnable .jar和Eclipse运行之间的行为是非常不同的

时间:2015-03-25 00:38:18

标签: java eclipse file-io jar

我使用XML文档作为多个类似文档的模板(每月报告的组织方式相同)。我一直在努力寻找文件的最通用路径。我提出了:

File f1 = new File("src/Statements/TemplateStatement.xml");

其中/Statements/是Eclipse中src选项卡下的文件夹,就像它只是另一个包一样。

然后:

File TemplateStatement = new File(f1.getAbsolutePath());
if (TemplateStatement.exists()) {
    // ...do some stuff
} else {
    JOptionPane.showMessageDialog(null, null,
            "ERROR: Transaction template not found.", JOptionPane.OK_CANCEL_OPTION);

    System.exit(0);
}

从Eclipse运行时,它运行良好,我的东西完成了。在我的桌面(同一台计算机和文件系统)上作为.jar运行时,我每次都会点击else子句。我怀疑我错过了一个非常基本但重要的特性,即jar如何打包工作区并运行它(因为没有与src目录相关联的?)。

我没有找到关于如何从震撼的应用程序中找到路径,访问,读取,写入,复制等文件的示例或解释。我真的想避免硬编码完整路径,因为代码可能会在各种机器上运行。任何建议或指示将不胜感激。

1 个答案:

答案 0 :(得分:0)

我刚刚遇到了类似的问题,它是由使用平台默认编码的java.io.FileReader函数引起的。

就我的情况而言,在运行Runnable .jar时,java.io.FileReader使用ISO-8859-1编码,而在Eclipse中它使用UTF-8编码。替换

new FileReader(filepath)

new InputStreamReader(new FileInputStream(filepath),  "UTF-8")

解决了我的问题。