目录
0. 快递与路径的类比
理解文件的绝对路径和相对路径,最直观的方式是类比“快递如何寄送”的情境。想象一下:
- 快递寄送地址(绝对路径):就像你填写的收货地址,无论你在全国哪个地方,这个地址指向的就是收件人所在的具体位置。这个地址不依赖你所在的位置,具有唯一性。
- 从某个地点出发的路径(相对路径):如果你要从自己家出发去快递公司,你就需要告诉别人“从我的家出发,走到快递公司”,这条路径是相对于你家(当前工作目录)来说的,它依赖于你从哪里出发。
绝对路径 vs 相对路径
-
绝对路径:
- 是文件系统中指向目标文件或文件夹的完整路径,通常是从文件系统的根目录开始(在 Unix 系统中为
/,在 Windows 系统中为盘符,如C:\)。 - 无论你当前所在的位置在哪里,绝对路径都能指向同一个目标。
示例:
- 在 Linux 系统中:
/home/user/Documents/file.txt - 在 Windows 系统中:
C:\Users\User\Documents\file.txt
- 是文件系统中指向目标文件或文件夹的完整路径,通常是从文件系统的根目录开始(在 Unix 系统中为
-
相对路径:
- 是相对于当前工作目录(你现在所在的目录)的一条路径。你需要告诉操作系统,从当前目录到目标文件或文件夹的路径。
- 相对路径通常不包含根目录,依赖于你当前所在的目录,因此可以根据不同的起点而变化。
示例:
- 假设你现在在
/home/user/目录下,你想访问/home/user/Documents/file.txt,那么相对路径就是:Documents/file.txt - 如果你在
Documents文件夹下,那么相对路径就是:file.txt
绝对路径和相对路径的应用
1. 绝对路径:
- 无论你当前在文件系统的哪个位置,绝对路径都是固定的,指向同一个文件或文件夹。
- 示例:当你访问文件
/home/user/Documents/file.txt时,系统会根据绝对路径直接定位文件,无需考虑当前目录。
优点:确定性强,能够精确定位目标。
缺点:不灵活,文件系统的层级变化会导致路径变化,且较长。
2. 相对路径:
- 相对路径取决于你当前的工作目录,因此文件的位置和目标之间的相对关系会影响路径的表达。
- 示例:如果你在
/home/user/目录下,你可以使用Documents/file.txt来访问该文件,而不需要写出完整的/home/user/Documents/file.txt。
优点:灵活,能够根据当前的目录结构变化而调整路径。
缺点:在不同的目录下,路径含义会发生变化,可能会导致错误。
总结
- 绝对路径:从根目录开始,明确指向目标文件或文件夹,位置固定。
- 相对路径:相对于当前目录的路径,依赖于当前工作目录,灵活但可能变化。
类比示例
-
假设你当前在
/home/user/目录下,你要访问
/home/user/Documents/file.txt文件:
- 绝对路径是
/home/user/Documents/file.txt - 相对路径是
Documents/file.txt(相对当前目录/home/user/)
- 绝对路径是
理解了这两者的区别,就能更好地理解如何在编程中使用文件路径了。在操作文件时,你可以选择使用绝对路径(当路径固定时)或者相对路径(当路径根据当前目录变化时)。
3. File 类
File 类是 Java 中非常常用的类,用于对文件和目录(文件夹)进行操作。它不直接处理文件的内容,而是用于获取文件属性、路径信息、判断文件状态等操作。
File 类的常见用途:
- 创建文件对象:
- 使用
File类创建文件对象时,通常需要传入文件的路径。 - 注意:路径可以是绝对路径或相对路径。如果路径是相对的,它将基于当前工作目录。
- 使用
- 获取文件或目录的属性:
- 你可以通过
File类提供的各种方法来判断文件的属性,获取文件大小,修改时间等信息。
- 你可以通过
- 遍历目录中的文件:
- 你可以列出目录中的所有文件和子目录,通过
list()方法得到所有文件或子文件夹的名称。
- 你可以列出目录中的所有文件和子目录,通过
示例分析:
package com.nix.demo;
import org.junit.Test;
import java.io.File;
// 3. File类
/*
使用File类new一个对象时一定要使用绝对路径,这个类中不仅包含了对文件的操作,还有对文件夹的操作
文件流中最重要的是对文件路径的了解,调用文件流中的类
*/
public class DemoTest {
@Test
public void demo1() {
// 这里必须是绝对路径
File file1 = new File("C:\\Users\\86157\\Desktop\\Courses");
// 获取父级路径
System.out.println(file1.getParent());
// 判断是否为文件
System.out.println(file1.isFile());
// 判断字节长度
System.out.println(file1.length());
}
// 输出文件夹名字
@Test
public void demo2() {
File file2 = new File("C:\\Users\\86157\\Desktop\\Courses");
// file2.list() 方法用于获取 file2 这个文件夹中的所有文件和子文件夹的名称
String[] courses = file2.list();
// 遍历文件夹中的文件/子文件夹名称
for (String name : courses) {
System.out.println(name);
}
}
}
代码解读:
new File(String path):File对象通过文件路径创建。这里需要注意的是,可以使用绝对路径或者相对路径来创建文件对象,但通常建议使用绝对路径,这样路径更明确。- 例:
new File("C:\\Users\\86157\\Desktop\\Courses")
getParent():- 获取当前
File对象的父级目录路径。
- 获取当前
isFile():- 检查该路径是否指向一个文件。如果路径是一个文件,则返回
true,否则返回false。
- 检查该路径是否指向一个文件。如果路径是一个文件,则返回
length():- 获取文件的大小(以字节为单位)。对于目录,这个方法返回 0。
list():- 返回当前目录下所有文件和子目录的名称,以字符串数组的形式返回。如果文件对象不是一个目录,该方法将返回
null。
- 返回当前目录下所有文件和子目录的名称,以字符串数组的形式返回。如果文件对象不是一个目录,该方法将返回
使用 File 类注意事项:
- 路径问题:
- 路径可以是相对路径或者绝对路径。为了确保准确性,通常推荐使用绝对路径。
- 在 Windows 系统中,路径分隔符是反斜杠 (
\),而在 Unix 系统中是斜杠 (/)。可以使用File.separator来适配不同的操作系统。
- 目录与文件判断:
isFile()可以判断对象是否为文件,而isDirectory()用来判断对象是否为目录。
- 文件和目录的操作:
File类可以用来创建、删除文件或目录,但不能直接读取或写入文件内容。要读取或写入文件,你需要使用FileInputStream、FileOutputStream、BufferedReader等类。
示例输出:
-
demo1输出:C:\Users\86157\Desktop false 0 -
demo2输出: 如果Courses文件夹下有一些文件或子目录,输出会显示它们的名称,例如:file1.txt file2.txt subfolder
总结
File类提供了访问文件和目录的基础方法,但它并不直接处理文件内容的读取和写入。- 你可以使用
File类来检查文件是否存在、获取文件的大小、列出目录内容等。 - 需要注意的是,
File类在操作文件路径时要特别小心路径的正确性。
4. Linux与Windows上的路径差异
在操作系统之间,文件路径的表示方式存在一些关键的差异。理解这些差异对于在跨平台环境中编写代码非常重要。
-
Linux/Unix系统的路径表示方式:
- 在Linux/Unix系统中,路径是由单斜杠 (
/) 来分隔的,不需要转义字符。 - 绝对路径是从根目录 (
/) 开始的。
示例:
- 文件夹路径:
/home/user/Documents - 文件路径:
/home/user/Documents/file.txt
在这个例子中,路径从根目录 (
/) 开始,然后逐级进入home目录,再进入user目录,最后到达Documents目录。 - 在Linux/Unix系统中,路径是由单斜杠 (
-
Windows系统的路径表示方式:
- 在Windows系统中,路径是由反斜杠 (
\) 来分隔的。 - 注意: 在字符串中,反斜杠 (
\) 是一个转义字符,所以在Windows路径中需要使用双反斜杠 (\\) 来避免转义字符的干扰(例如:\n,\t等)。
示例:
- 文件夹路径:
C:\Users\user\Documents - 文件路径:
C:\Users\user\Documents\file.txt
在Windows中,路径是由驱动器字母(如
C:)开始,然后使用反斜杠 (\) 作为目录分隔符。 - 在Windows系统中,路径是由反斜杠 (
路径转义与兼容性
-
转义字符: 在Java中,反斜杠 (
\) 是一个转义字符,意味着它有特殊的含义,例如:\n:表示换行。\t:表示制表符。
因此,在Windows的路径表示中,如果直接使用
\,可能会被解释为转义字符,导致路径错误。为避免这种情况,应该使用\\来表示反斜杠。 -
Linux与Windows路径的差异:
- Linux/Unix路径:使用
/作为路径分隔符,不需要转义。 - Windows路径:使用
\\作为路径分隔符,并且需要双反斜杠(\\)在代码中表示。
- Linux/Unix路径:使用
总结:
- Linux/Unix:路径以
/开始,使用/作为路径分隔符。 - Windows:路径以驱动器字母(如
C:)开始,使用\\作为路径分隔符,并且需要特别注意转义字符的问题。 - 跨平台代码:为了编写能够在不同操作系统上运行的代码,建议使用
File.separator来处理路径分隔符。

被折叠的 条评论
为什么被折叠?



