【问题标题】:Behavior between Runnable .jar and Eclipse run is very differentRunnable .jar 和 Eclipse 运行之间的行为非常不同
【发布时间】:2015-03-25 00:38:17
【问题描述】:

我正在使用 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 子句。我怀疑我缺少一个非常基本但重要的属性,即 jars 如何打包工作区并运行它(因为不再有 src 与之关联的目录?)。

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

【问题讨论】:

  • 欢迎来到 StackOverflow,Bercheart。您是如何创建 jar 文件的?你看过this related question了吗?它解释了如何将 eclipse 项目导出为jar 文件,以及如何包含其他组件。
  • Jar 中的对象不是文件,不能使用File 访问。使用Class.getResource 访问jar 对象。

标签: java eclipse file-io jar


【解决方案1】:

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

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

new FileReader(filepath)

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

解决了我的问题。

【讨论】:

    猜你喜欢
    • 2011-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-25
    • 1970-01-01
    • 2013-06-26
    • 1970-01-01
    • 2019-02-15
    相关资源
    最近更新 更多