我正在尝试制作一个程序,该程序在jar-file目录中创建文本文件。为此,我使用类 files :
Files.write(Paths.get("Test.txt"), "foo.txt".getBytes(), StandardOpenOption.CREATE);
我注意到,当我导出程序并通过键入 java -jar program.jar.jar.jar test.txt.txt 文件是创建的取决于我从中启动的目录。
示例:
program.jar位于〜/桌面中。
我在默认目录(主目录(中启动终端。我键入Java -jar桌面/program.jar。---> test.txt是在〜。
中创建的我在默认目录中启动终端,然后键入CD桌面,然后在〜/desktop中创建Java -jar program.jar ---> test.txt。
我认为原因是paths.get((调用fileSystems.getDefault((,该filesystems.getdefault((将终端目录返回为程序的" root"。当我在桌面上启动GUI应用程序,该应用程序使用与上述相同的方法创建文件时,该文件也是在主目录中创建的,我认为可能是因为在双击命令Java-jar〜/Desktop上/guipragram.jar称为
我的想法对吗?我该怎么做才能实现与程序在同一目录中创建文件的目标?最后,我想要一个GUI应用程序,因此始终将终端和CD使用到桌面目录中不是解决方案。我必须使用另一个类进行I/O操作吗?我很想继续使用文件,因为它是如此简单和简短。
预先感谢您的帮助!
如此问题所述,您可以通过这样的奇数操作找到JAR文件的路径:
String path = Test.class.getProtectionDomain().getCodeSource().getLocation().getPath();
String decodedPath = URLDecoder.decode(path, "UTF-8");
找到JAR文件的路径后,您可以将此路径作为路径的第一个参数传递。get方法:
Files.write(Paths.get(decodedPath,"Test.txt") , "foo.txt".getBytes(), StandardOpenOption.CREATE);