Java:使用Files.write()在.jar文件的目录中创建文件

时间:2018-04-02 08:56:23

标签: java file input output nio

我正在尝试创建一个在jar文件目录中创建文本文件的程序。为此,我使用类 Files

    Files.write(Paths.get("Test.txt"), "foo.txt".getBytes(), StandardOpenOption.CREATE);

我注意到当我导出程序并通过键入 java -jar Program.jar 将其从控制台中启动时, Test.txt 文件的目录是created取决于我从中启动它的目录。

示例:

Program.jar位于〜/ Desktop中。

  1. 我在〜(主目录)的默认目录中启动终端。我输入java -jar Desktop / Program.jar。 ---> Test.txt在〜。

  2. 中创建
  3. 我在默认目录中启动终端并输入cd Desktop然后输入java -jar Program.jar ---> Test.txt在〜/ Desktop。

  4. 中创建

    我认为原因是Paths.get()调用FileSystems.getDefault(),它将终端的目录作为" root"对于该计划。 当我在桌面上启动GUI应用程序时,使用与上述相同的方法创建文件,该文件也在主目录中创建,我认为这可能是因为双击命令java-jar~ / Desktop调用/GUIProgram.jar。

    我的想法是对的吗?我能做些什么来实现我在与程序相同的目录中创建文件的目标?最后,我想要一个GUI应用程序,因此它不是一个总是使用终端和cd到Desktop目录的解决方案。我是否必须使用另一个类进行I / O操作?我喜欢继续使用文件,因为它简单而简短。

    提前感谢您的帮助!

1 个答案:

答案 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);