gpt4 book ai didi

java - 从命令行启动时,Java 中 File 对象的绝对路径不同

转载 作者:行者123 更新时间:2023-12-02 07:07:14 24 4
gpt4 key购买 nike

我有一个包含以下代码的程序:

import java.io.File;
import javax.swing.JOptionPane;

public class Main {

public static void main(String[] args) {
File file = new File("config");
JOptionPane.showMessageDialog(null, file.getAbsolutePath());
System.out.println(file.getAbsolutePath());
}
}

我将其导出为 Eclipse 中的 Runnable Jar。然后,我将文件复制到 Ubuntu 13.04 系统上的 /home/username/Desktop/cd 到该目录。当我运行命令 java -jar Main.jar 时,我得到以下输出:

/home/username/Desktop/config

现在我运行 chmod 使 Jar 可执行,然后双击 Jar。我从对话框中得到以下输出:

/home/username/config

为什么我得到不同的输出?将 Jar 移动到其他目录会产生类似的结果。谷歌搜索和搜索并没有阐明这个问题。

最佳答案

new File("config")相对于运行 JVM 的进程的工作目录。当您在 cd 之后从命令行运行时'ing 进入该目录,那就是工作目录。

从 Ubuntu GUI 中双击 jar 不会将工作目录设置为包含 jar 文件的同一目录,因此存在差异。

试试这个:

cd into /home/username从类似命令,然后输入 java -jar Desktop/Main.jar 。这将打印出与双击 jar 时相同的结果。

如果您想每次都获取相同的目录,请使用绝对目录名。在 Linux 上,可以通过以/开头的目录来实现这一点。例如new File("/home/username/config") 。如果您想动态查找用户主目录,请使用 System.getProperty("user.home") .

例如new File( System.getProperty("user.home") + "/config" );

关于java - 从命令行启动时,Java 中 File 对象的绝对路径不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15955718/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com