java - Runnable .jar 和 Eclipse run 之间的行为非常不同

标签 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 目录了?)。

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

最佳答案

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

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

new FileReader(filepath)

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

解决了我的问题。

关于java - Runnable .jar 和 Eclipse run 之间的行为非常不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29245546/

相关文章:

java - 我需要在我的服务器上做什么才能与 Android 应用程序通信?

Java计算每次递归调用的结束

c - Eclipse CDT 附带什么?

java - 将 SWT 应用程序导出为 jar 文件

c - 从文件中读取

c++ - 无法在 mac 上使用 qt app 打开文件

java - 不同的随机数

java - 代号one和jformdesigner

java - 如何在 eclipse 中配置 java web 应用程序以反射(reflect)在 tomcat 上部署后后端 jar 中的更改

python - json.dump 不写入文件