我有一个包含以下代码的程序:
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/