在Java中获取当前工作目录

2023/07/03

1. 概述

在Java中获取当前工作目录是一项简单的任务,但不幸的是,JDK中没有可用的直接API来执行此操作。

在本教程中,我们将学习如何使用java.lang.System、java.io.File、java.nio.file.FileSystems和java.nio.file.Paths获取Java中的当前工作目录。

2. System

让我们从使用System#getProperty的标准解决方案开始,假设我们当前的工作目录名称在整个代码中都是Tuyucheng:

static final String CURRENT_DIR = "Tuyucheng";
@Test
void whenUsingSystemProperties_thenReturnCurrentDirectory() {
    String userDirectory = System.getProperty("user.dir");
    assertTrue(userDirectory.endsWith(CURRENT_DIR));
}

我们使用Java内置的属性键user.dir从System的属性映射中获取当前工作目录,此解决方案适用于所有JDK版本。

3. File

让我们看看另一个使用java.io.File的解决方案:

@Test
void whenUsingJavaIoFile_thenReturnCurrentDirectory() {
    String userDirectory = new File("").getAbsolutePath();
    assertTrue(userDirectory.endsWith(CURRENT_DIR));
}

在这里,File#getAbsolutePath在内部使用System#getProperty来获取目录名称,类似于我们的第一个解决方案。这是获取当前工作目录的非标准解决方案,并且适用于所有JDK版本。

4. FileSystems

另一个有效的替代方法是使用新的java.nio.file.FileSystems API:

@Test
void whenUsingJavaNioFileSystems_thenReturnCurrentDirectory() {
    String userDirectory = FileSystems.getDefault()
        .getPath("")
        .toAbsolutePath()
        .toString();
    assertTrue(userDirectory.endsWith(CURRENT_DIR));
}

该解决方案使用新的Java NIO API,并且仅适用于JDK 7或更高版本

5. Paths

最后,让我们看看使用java.nio.file.Paths API获取当前目录的更简单的解决方案:

@Test
void whenUsingJavaNioPaths_thenReturnCurrentDirectory() {
    String userDirectory = Paths.get("")
        .toAbsolutePath()
        .toString();
    assertTrue(userDirectory.endsWith(CURRENT_DIR));
}

在这里,Paths#get在内部使用FileSystem#getPath来获取路径。它使用新的Java NIO API,因此该解决方案仅适用于JDK 7或更高版本

6. 总结

在本教程中,我们探讨了四种在Java中获取当前工作目录的不同方法。前两个解决方案适用于所有版本的JDK,而后两个解决方案仅适用于JDK 7或更高版本。

我们建议使用System解决方案,因为它高效且直接,我们可以通过将此API调用包装在静态实用程序方法中并直接访问它来简化。

与往常一样,本教程的完整源代码可在GitHub上获得。

Show Disqus Comments

Post Directory

扫码关注公众号:Taketoday
发送 290992
即可立即永久解锁本站全部文章