我使用 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/