我正在制作一个Java程序,我将包装它成为测试和生产.exe。程序初始化过程的一部分是将一个名为"config"的文件夹与可执行文件位于同一级别。为了说明:
---> Parent Folder
---> myProgram.exe
---> config/
这就是理想情况下应该发生的事情。
截至目前,我正在测试此代码块:
String config_dir = "./config";
if(!new File(config_dir).exists()){
new File(config_dir).mkdirs();
return;
}
它的作用是检查目录是否存在,如果不存在,则创建它。
但是,此代码由我的Main.java
类运行,当它更高一级来创建config
目录时,它仍然与工作区目录中的其他文件夹处于同一级别:
---> MyProject
---> bin
---> external_lib
---> src
---> config
这是有道理的,因为我只让应用程序创建文件夹高一级。但是,在将其打包为 exe 文件后,它需要使该文件夹与 exe 文件处于同一级别。我只是担心它可能不会那样工作。
有没有人有办法确保在与打包的可执行 Java 文件相同的级别上创建文件夹?我正在Mac上工作,可能需要一些时间才能对其进行测试。
从"运行 JAR"的角度来看,您可以使用
System.getProperty("user.dir")
返回 JVM 启动的路径。一旦你把它变成可执行文件,我不确定你到底需要什么。但你也可以尝试
getClass().getProtectionDomain().getCodeSource().getLocation()
Java
不切题的。
相对文件夹创建与非编译代码到可执行文件有何不同?
其实不然。
我正在制作一个Java程序,我将包装它成为测试和生产的.exe。程序初始化过程的一部分是将一个名为"config"的文件夹与可执行文件位于同一级别。
为此,您需要知道可执行文件的位置。对于由main()
方法argv[0]
给出的 C 或 C++ 可执行文件。对于Java JAR文件,它由getClass().getProtectionDomain().getCodeSource().getLocation()
给出。
String config_dir = "./config";
这将在用户的当前工作目录中创建一个文件夹,与System.getProperty("user.dir")
返回的文件夹相同。不是"与可执行文件处于同一级别"。
但是,此代码由我的 Main.java 类运行,当它更高一级来创建配置目录时,它仍然与工作区目录中的其他文件夹处于同一级别:
它仍在当前工作目录中。您的工作区与它无关,除非它是当前工作目录。
但是,在将其打包为 exe 文件后,它需要使该文件夹与 exe 文件处于同一级别。
不。在当前工作目录中。总是。这就是.
的意思。
没有人有办法确保在与打包的可执行 java 文件相同的级别上创建文件夹?
见上文,但是,从评论和你在自己的答案中接受的内容来看,我认为这不是你真正想要的。我认为您希望它在当前工作目录中,这就是您得到的。当前工作目录实际上是什么取决于您运行程序的方式以及从何处运行。如果从 IDE 中运行,您将了解 IDE 的想法。如果从命令行运行,您将获得 shell 的cwd
。如果通过双击运行,您将获得为双击定义的任何cwd
,这可能是可执行文件或 JAR 文件的目录。