java - Java如何获取当前工作目录?

  显示原文与译文双语对照的内容

我想使用当前的工作目录访问


 String current = new java.io.File("." ).getCanonicalPath();
 System.out.println("Current dir:"+current);
 String currentDir = System.getProperty("user.dir");
 System.out.println("Current dir using System:" +currentDir);

输出:


Current dir: C:WINDOWSsystem32
Current dir using System: C:WINDOWSsystem32

我的输出不正确,因为驱动器不是我的当前目录。 在这方面需要帮助。

时间:


public class JavaApplication1 {
 public static void main(String[] args) {
 System.out.println("Working Directory =" +
 System.getProperty("user.dir"));
 }
}

这将从你的应用程序初始化的位置打印一个收费的完整绝对路径。

你认为 windowssystem32: 不是你当前的目录? user.dir 属性显式为"用户工作目录"的当前属性。

换句话说,除非你从 命令行 开始,:windowssystem32 可能是你的CWD 。 也就是说,如果你是double-clicking来启动你的程序,CWD不太可能是你双击的目录。

//edit//似乎只对旧的Windows 和/或者Java版本有效。

我在Linux上,同时获得了两种方法的相同结果:


@Test
public void aaa()
{
 System.err.println(Paths.get("").toAbsolutePath().toString());

 System.err.println(System.getProperty("user.dir"));
}

Paths.get("") 文档

System.getProperty("user.dir") 文档

使用 CodeSource#getLocation ( ) 。这在JAR文件中也能正常工作。 你可以通过 ProtectionDomain#getCodeSource ( ) 获取 CodeSource,然后通过 Class#getProtectionDomain ( ) 获取 ProtectionDomain


public class Test {
 public static void main(String... args) throws Exception {
 URL location = Test.class.getProtectionDomain().getCodeSource().getLocation();
 System.out.println(location.getFile());
 }
}

通常,作为一个文件对象:


File getCwd() {
 return new File("").getAbsoluteFile();
}

你可能想要有完全合格的字符串,比如"D: b/c":


getCwd().getAbsolutePath()

...