我正在尝试创建一个在jar文件目录中创建文本文件的程序。为此,我使用类 Files :
Files.write(Paths.get("Test.txt"), "foo.txt".getBytes(), StandardOpenOption.CREATE);
我注意到当我导出程序并通过键入 java -jar Program.jar 将其从控制台中启动时, Test.txt 文件的目录是created取决于我从中启动它的目录。
示例:
Program.jar位于〜/ Desktop中。
我在〜(主目录)的默认目录中启动终端。我输入java -jar Desktop / Program.jar。 ---> Test.txt在〜。
我在默认目录中启动终端并输入cd Desktop然后输入java -jar Program.jar ---> Test.txt在〜/ Desktop。
我认为原因是Paths.get()调用FileSystems.getDefault(),它将终端的目录作为" root"对于该计划。 当我在桌面上启动GUI应用程序时,使用与上述相同的方法创建文件,该文件也在主目录中创建,我认为这可能是因为双击命令java-jar~ / Desktop调用/GUIProgram.jar。
我的想法是对的吗?我能做些什么来实现我在与程序相同的目录中创建文件的目标?最后,我想要一个GUI应用程序,因此它不是一个总是使用终端和cd到Desktop目录的解决方案。我是否必须使用另一个类进行I / O操作?我喜欢继续使用文件,因为它简单而简短。
提前感谢您的帮助!
答案 0 :(得分:-1)
如this question中所述,您可以通过以下奇怪的操作找到jar文件的路径:
String path = Test.class.getProtectionDomain().getCodeSource().getLocation().getPath();
String decodedPath = URLDecoder.decode(path, "UTF-8");
找到jar文件的路径后,可以将此路径作为Paths.get方法的第一个参数传递:
Files.write(Paths.get(decodedPath,"Test.txt") , "foo.txt".getBytes(), StandardOpenOption.CREATE);