【问题标题】:How to open a file in the same directory as the .jar file of the application? [duplicate]如何打开与应用程序的 .jar 文件位于同一目录中的文件? [复制]
【发布时间】:2017-03-12 01:50:49
【问题描述】:

我正在尝试使用相对路径的组合将 .txt 文件加载到 java 中的 arrayList 中。 我的 jar 文件在 /usr/tool/dist/tool.jar 我要加载的文件在 /usr/tool/files/file.txt

我想我能够检索到我的 tool.jar 的路径,但我怎样才能从该路径转到我的文件所在的路径?

我有以下代码

// String path should give me '/usr/tool'
File f = new File(System.getProperty("java.class.path"));
File dir = f.getAbsoluteFile().getParentFile();
String path = dir.toString();
String table1 = this should represent /usr/tool/files/file.txt
BufferedReader buf_table1 = new BufferedReader(new FileReader(new File(table1)));

【问题讨论】:

  • 如果path"/usr/tool" 如你所说(是吗?你应该测试System.out.println(path); 并将结果添加到你的问题中。),你为什么不写类似@987654325 的东西@?
  • CLASSPATH 不是文件。它是 .class 文件所在的目录和 .jar 文件的列表。不清楚你在问什么。

标签: java


【解决方案1】:

要查找正在执行的jar 文件的路径,java.class.path 不是正确的属性。此属性可能包含多个文件,您无法知道哪个是正确的。 (See the docs.)

要找到正确的 jar 文件的路径,您可以改用这个:

URL url = MainClass.class.getProtectionDomain().getCodeSource().getLocation().getPath();

MainClass 是您工具的主类,或同一 jar 文件中的任何其他类。

接下来,文件的父File 是它的目录。所以/usr/tool/dist/tool.jar 的父File/usr/tool/dist/。所以如果你想得到/usr/tool/files/file.txt,你需要得到父级的父级,然后从那里得到files/file.txt

把它放在一起:

File jarFile = new File(MainClass.class.getProtectionDomain().getCodeSource().getLocation().getPath());
File file = new File(jarFile.getParentFile().getParent(), "files/file.txt");

【讨论】:

  • 是的,将MainClass 替换为您的班级名称。
猜你喜欢
  • 1970-01-01
  • 2012-11-26
  • 2018-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-17
  • 2013-02-04
  • 1970-01-01
相关资源
最近更新 更多