繁体   English   中英

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

[英]Java: File creation in the directory of the .jar-file with Files.write()

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

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

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

例:

Program.jar位于〜/ Desktop中。

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

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

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

我的想法正确吗? 我该怎么做才能实现在与程序相同目录中创建文件的目标? 最后,我需要一个GUI应用程序,因此始终使用终端和cd到Desktop目录不是一个解决方案。 我是否必须使用其他类进行I / O操作? 我希望继续使用文件,因为它是如此的简单和简短。

在此先感谢您的帮助!

就像在这个问题中解释的那样,您可以通过一些奇怪的操作找到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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM