System.getProperty(“user.dir“)获取用户工作目录及绝对路径和相对路径的说明
所有在java.io中的类都将相对路径名解释为以用户工作目录开始,可以通过调用System.getProperty(“user.dir”)来获取这个信息
项目结构
代码
package com.burns.test;
import java.io.File;
import java.io.FileInputStream;
public class FileTest {
public static void main(String[] args) throws Exception{
String property = System.getProperty("user.dir");
System.out.println(property);
FileInputStream fis = null;
fis = new FileInputStream("C:\\Users\\ceshi\\Desktop\\tencent970923110695913725.txt");
File file = new File("pom.xml");
System.out.println(file.getAbsolutePath());
File file4 = new File("src/main/java/com/burns/test/FileTest.java");
System.out.println(file4.getAbsolutePath());
File file3 = new File("\\pom.xml");
System.out.println(file3.getAbsolutePath());
File file1 = new File("..\\pom.xml");
System.out.println(file1.getAbsolutePath());
File file2 = new File(".\\pom.xml");
System.out.println(file2.getAbsolutePath());
fis = new FileInputStream("pom.xml");
// 读取fis
byte[] bytes = new byte[1024];
while (fis.read(bytes) != -1){
System.out.println(new String(bytes));
}
}
}
输出
D:\workspace\idea_proj\jdk_demo_20250311\jdk_demo_8
D:\workspace\idea_proj\jdk_demo_20250311\jdk_demo_8\pom.xml
D:\workspace\idea_proj\jdk_demo_20250311\jdk_demo_8\src\main\java\com\burns\test\FileTest.java
D:\pom.xml
D:\workspace\idea_proj\jdk_demo_20250311\jdk_demo_8\..\pom.xml
D:\workspace\idea_proj\jdk_demo_20250311\jdk_demo_8\.\pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.burns</groupId>
<artifactId>jdk_demo_20250311</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<groupId>com.burns.jdk8</groupId>
<artifactId>jdk_demo_8</artifactId>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
</project>
整理总结
在 Java 中,使用 File
类创建文件对象时,路径可以是全路径(绝对路径)或相对路径。理解这两种路径的区别以及相对路径前面加 \\
的含义非常重要。以下是详细的解释:
全路径(绝对路径)
- 定义:全路径是从文件系统的根目录开始的完整路径。
- 示例:
- Windows:
C:\\Users\\Username\\Documents\\file.txt
- Unix/Linux/Mac:
/home/username/documents/file.txt
- Windows:
相对路径
- 定义:相对路径是相对于当前工作目录的路径。
- 当前工作目录:通常是运行 Java 程序的目录。
- 示例:
- 相对于当前工作目录的文件:
documents/file.txt
- 相对于当前工作目录的子目录:
subdir/file.txt
- 相对于当前工作目录的文件:
相对路径前面加 \\
在 Windows 系统中,路径分隔符通常是反斜杠 \
。然而,在 Java 字符串中,反斜杠 \
是转义字符。因此,如果你在字符串中直接使用反斜杠,需要进行转义。
- 转义反斜杠:在字符串中使用双反斜杠
\\
来表示一个反斜杠。 - 示例:
- 错误的路径表示:
"C:\Users\Username\Documents\file.txt"
(会导致编译错误) - 正确的路径表示:
"C:\\Users\\Username\\Documents\\file.txt"
- 错误的路径表示:
示例代码
使用全路径
import java.io.File;
public class FileExample {
public static void main(String[] args) {
// Windows 全路径
File file = new File("C:\\Users\\Username\\Documents\\file.txt");
System.out.println("File exists: " + file.exists());
// Unix/Linux/Mac 全路径
// File file = new File("/home/username/documents/file.txt");
// System.out.println("File exists: " + file.exists());
}
}
使用相对路径
import java.io.File;
public class FileExample {
public static void main(String[] args) {
// 相对路径
File file = new File("documents/file.txt");
System.out.println("File exists: " + file.exists());
}
}
当前工作目录
- 获取当前工作目录:
- 使用
System.getProperty("user.dir")
可以获取当前工作目录。
- 使用
- 示例:
import java.io.File;
public class CurrentDirectoryExample {
public static void main(String[] args) {
String currentDir = System.getProperty("user.dir");
System.out.println("Current Directory: " + currentDir);
// 使用相对路径
File file = new File("documents/file.txt");
System.out.println("File exists: " + file.exists());
}
}
总结
- 全路径:从文件系统的根目录开始的完整路径。
- 相对路径:相对于当前工作目录的路径。
- 转义反斜杠:在 Windows 系统中,路径分隔符
\
需要转义为\\
。 - 当前工作目录:可以通过
System.getProperty("user.dir")
获取。
通过理解这些概念,你可以更准确地指定文件路径,避免路径相关的错误。以下是表格总结:
路径类型 | 定义 | 示例 | 注意事项 |
---|---|---|---|
全路径 | 从文件系统的根目录开始的完整路径 | C:\\Users\\Username\\Documents\\file.txt /home/username/documents/file.txt | 使用绝对路径时,确保路径正确且文件存在。 |
相对路径 | 相对于当前工作目录的路径 | documents/file.txt subdir/file.txt | 当前工作目录可以通过 System.getProperty("user.dir") 获取。 |
转义反斜杠 | 在 Windows 系统中,路径分隔符 \ 需要转义为 \\ | "C:\\Users\\Username\\Documents\\file.txt" | 在字符串中使用双反斜杠 \\ 来表示一个反斜杠。 |
希望这些解释和示例代码能帮助你更好地理解和使用 Java 中的文件路径。