1. Overview
1.概述
It’s an easy task to get the current working directory in Java, but unfortunately, there’s no direct API available in the JDK to do this.
在Java中获取当前工作目录是一件很容易的事,但不幸的是,在JDK中没有直接的API来做这件事。
In this tutorial, we’ll learn how to get the current working directory in Java with java.lang.System, java.io.File, java.nio.file.FileSystems, and java.nio.file.Paths.
在本教程中,我们将学习如何用java.lang.System、java.io.File、java.nio.file.FileSystems、和java.nio.file.Paths获得Java中当前工作目录。
2. System
2.系统
Let’s begin with the standard solution using System#getProperty, assuming our current working directory name is Baeldung throughout the code:
让我们从使用System#getProperty的标准解决方案开始,假设我们的当前工作目录名称在整个代码中为Baeldung。
static final String CURRENT_DIR = "Baeldung";
@Test
void whenUsingSystemProperties_thenReturnCurrentDirectory() {
String userDirectory = System.getProperty("user.dir");
assertTrue(userDirectory.endsWith(CURRENT_DIR));
}
We used a Java built-in property key user.dir to fetch the current working directory from the System‘s property map. This solution works across all JDK versions.
我们使用Java内置的属性键user.dir,从System的属性图中获取当前工作目录。这个解决方案适用于所有JDK版本。
3. File
3.文件
Let’s see another solution using java.io.File:
让我们看看另一个使用java.io.File的解决方案。
@Test
void whenUsingJavaIoFile_thenReturnCurrentDirectory() {
String userDirectory = new File("").getAbsolutePath();
assertTrue(userDirectory.endsWith(CURRENT_DIR));
}
Here, the File#getAbsolutePath internally uses System#getProperty to get the directory name, similar to our first solution. It’s a nonstandard solution to get the current working directory, and it works across all JDK versions.
这里,File#getAbsolutePath内部使用System#getProperty来获取目录名,与我们的第一个解决方案类似。这是一个获取当前工作目录的非标准解决方案,它适用于所有JDK版本。
4. FileSystems
4.文件系统
Another valid alternative would be to use the new java.nio.file.FileSystems API:
另一个有效的选择是使用新的java.nio.file.FileSystemsAPI。
@Test
void whenUsingJavaNioFileSystems_thenReturnCurrentDirectory() {
String userDirectory = FileSystems.getDefault()
.getPath("")
.toAbsolutePath()
.toString();
assertTrue(userDirectory.endsWith(CURRENT_DIR));
}
This solution uses the new Java NIO API, and it works only with JDK 7 or higher.
该解决方案使用新的Java NIO API,它仅适用于JDK 7或更高版本。
5. Paths
5.路径
And finally, let’s see a simpler solution to get the current directory using java.nio.file.Paths API:
最后,让我们看看一个更简单的解决方案,使用java.nio.file.PathsAPI获得当前目录。
@Test
void whenUsingJavaNioPaths_thenReturnCurrentDirectory() {
String userDirectory = Paths.get("")
.toAbsolutePath()
.toString();
assertTrue(userDirectory.endsWith(CURRENT_DIR));
}
Here, Paths#get internally uses FileSystem#getPath to fetch the path. It uses the new Java NIO API, so this solution works only with JDK 7 or higher.
在这里,Paths#get内部使用FileSystem#getPath来获取路径。它使用了新的Java NIO API,因此该解决方案仅适用于JDK 7或更高版本。
6. Conclusion
6.结论
In this tutorial, we explored four different ways to get the current working directory in Java. The first two solutions work across all versions of the JDK whereas the last two work only with JDK 7 or higher.
在本教程中,我们探讨了在Java中获取当前工作目录的四种不同方法。前两种方法适用于所有版本的JDK,而后两种方法仅适用于JDK 7或更高版本。
We recommend using the System solution since it’s efficient and straight forward, we can simplify it by wrapping this API call in a static utility method and access it directly.
我们推荐使用System解决方案,因为它高效且直接,我们可以通过将这个API调用包装在一个静态实用方法中并直接访问它来简化它。
The source code for this tutorial is available over on GitHub – it is a Maven-based project, so it should be easy to import and run as-is.
本教程的源代码可在GitHub上找到–它是一个基于Maven的项目,所以应该很容易导入并按原样运行。