从同一文件夹中的JAR访问文件

5
我需要从JAR文件(可执行的jar)中访问(创建和读取)一个文件,而且该文件应该在与JAR文件相同的目录中创建。
我尝试了this.getClass().getResource("myFile"),但由于JAR文件中有包,所以它不起作用。
我还尝试了只写File f = new File("myFile");f.createNewFile();,如果我从终端执行JAR文件,那么它可以工作,但是如果我双击JAR文件执行,该文件会被创建在我的主目录下。
如何确保访问与JAR文件在同一目录中的文件?
(当然,获取jar文件的绝对路径也可以解决问题,因为我可以从中获取父文件夹。)
1个回答

7

这将为您提供Jar的完整路径:

String path = this.getClass().getProtectionDomain().getCodeSource().getLocation().getPath();

编辑:抱歉,当我写下这句话时,我处于JavaScript模式 : )。如请求得到礼貌地提出的,在静态方法中,您应该能够执行此操作:

String path = Me.class.getProtectionDomain().getCodeSource().getLocation().getPath();

(其中类名为 Me )。

非常感谢!那么这行代码返回的值是否相同,即使我从JAR中的不同类运行它? - Pronte
只要它们都在完全相同的jar包中,是的,它们应该能够工作。 - Femi
var path是一个混合的隐喻 :) 同时,我将解释如何在静态方法中实现这一点。 - Miserable Variable
是的,我想通了,现在我已经能够测试并且我正在突出显示绿色的勾号! - Pronte
如果我想获取JAR文件所在目录的路径,而不是确切的.jar路径,该怎么办?我该如何做?实际上,我想在与JAR所在目录相同的目录中编写一个新文件。 - Faizan
new File(path).getParentFile() 将会给你目录。 - Femi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接