目录
- File 类
- File 类构造方法
- 常见成员方法
- 判断与获取
- 创建与删除
- 获取并遍历
File 类
-
File 对象表示一个路径,可以是文件的路径,也可以是文件夹的路径
-
这个路径可以是存在的,也允许是不存在的
-
绝对路径和相对路径的区别:
-
绝对路径是指从根目录开始描述文件或目录位置的完整路径。无论你在系统中的哪个位置,使用绝对路径都能准确定位到目标资源。例如,在Windows操作系统中,
C:\Users\username\Documents\example.txt
就是一个绝对路径;而在Linux或macOS系统中,/home/username/Documents/example.txt
则表示同样的含义。 -
相对路径则是相对于当前工作目录的位置来描述文件或目录的路径。它不包含盘符(如
C:
),也不一定从根目录开始。其有效性依赖于你所在的当前位置。比如如果你现在位于D:\Projects
文件夹下,那么你可以用.\myproject\src\main.cpp
来指代同级目录下的某个项目源码文件。 -
简单来说:
-
绝对路径总是能够唯一标识出一个具体的文件或文件夹,并且不会因为环境变化而改变;
-
相对路径更短小精悍,但需要结合上下文理解,并随所在位置的不同会有差异。
-
-
File 类构造方法
public File(String pathname)
根据文件路径创建文件对象public File(String parent,String child)
根据父路径名字符串和子路径名字符串创建文件对象(拼接)public File(File parent,String child)
根据父路径对应文件对象和子路径名字符串创建文件对象(拼接)
import java.io.File;public class FileDemo {public static void main(String[] args) {// 根据文件路径创建文件对象String str = "C:\\Users\\abcd\\Desktop\\输入输出.md";File f1 = new File(str);System.out.println(f1);// 根据父路径名字符串和子路径名字符串创建文件对象String parent = "C:\\Users\\abcd\\Desktop";String child = "输入输出.md";File f2 = new File(parent,child);System.out.println(f2);// 根据父路径对应文件对象和子路径名字符串创建文件对象File parent2 = new File("C:\\Users\\abcd\\Desktop");String child2 = "输入输出.md";File f3 = new File(parent2,child2);System.out.println(f3);}
}
常见成员方法
判断与获取
public boolean isDirectory()
判断此路径名表示的 File 是否为文件夹public boolean isFile()
判断此路径名的 File 是否为文件public boolean exists()
判断此路径名表示的 File 是否存在public long length()
返回文件的大小(字节数量)public String getAbsolutePath()
返回文件的绝对路径public String getPath()
返回定义文件时使用的路径public String getName()
返回文件的名称,带后缀public long lastModified()
返回文件的最后修改时间(时间毫秒值)
import java.io.File;public class FileOperations {public static void main(String[] args) {// 创建一个File对象,这里以项目根目录下的test.txt文件为例,可按需修改路径File file = new File("C:\\Users\\abcd\\Desktop\\输入输出.md");// 判断是否为文件夹boolean isDirectory = file.isDirectory();System.out.println("Is directory: " + isDirectory);// 判断是否为文件boolean isFile = file.isFile();System.out.println("Is file: " + isFile);// 判断是否存在boolean exists = file.exists();System.out.println("Exists: " + exists);// 获取文件大小(字节数),如果是文件夹此方法返回0long length = file.length();System.out.println("File size (bytes): " + length);// 获取绝对路径String absolutePath = file.getAbsolutePath();System.out.println("Absolute path: " + absolutePath);// 获取定义文件时使用的路径String path = file.getPath();System.out.println("Defined path: " + path);// 获取文件名称,带后缀String name = file.getName();System.out.println("File name: " + name);// 获取文件的最后修改时间(时间毫秒值)long lastModified = file.lastModified();System.out.println("Last modified time (milliseconds): " + lastModified);}
}
输出结果如下:
Is directory: false
Is file: true
Exists: true
File size (bytes): 4496
Absolute path: C:\Users\abcd\Desktop\输入输出.md
Defined path: C:\Users\abcd\Desktop\输入输出.md
File name: 输入输出.md
Last modified time (milliseconds): 1740232832244
创建与删除
-
public boolean createNewFile()
创建一个新的空的文件 -
public boolean mkdir()
创建单级文件夹 -
public boolean mkdirs
创建多级文件夹 -
public boolean delete()
删除文件、空文件夹(直接删除、不进入回收站)
import java.io.File;
import java.io.IOException;public class FileCreateAndDeleteExample {public static void main(String[] args) {// 示例路径,可根据实际情况修改String filePath = "test.txt";String singleDirPath = "singleDir";String multiDirPath = "parentDir\\childDir";// 创建新文件File file = new File(filePath);try {if (file.createNewFile()) {System.out.println("文件 " + filePath + " 创建成功");} else {System.out.println("文件 " + filePath + " 已存在");}} catch (IOException e) {System.out.println("创建文件时出错: " + e.getMessage());}// 创建单级文件夹File singleDir = new File(singleDirPath);if (singleDir.mkdir()) {System.out.println("单级文件夹 " + singleDirPath + " 创建成功");} else {System.out.println("单级文件夹 " + singleDirPath + " 创建失败或已存在");}// 创建多级文件夹File multiDir = new File(multiDirPath);if (multiDir.mkdirs()) {System.out.println("多级文件夹 " + multiDirPath + " 创建成功");} else {System.out.println("多级文件夹 " + multiDirPath + " 创建失败或已存在");}// 删除文件if (file.delete()) {System.out.println("文件 " + filePath + " 删除成功");} else {System.out.println("文件 " + filePath + " 删除失败");}// 删除单级文件夹,注意:文件夹必须为空才能删除成功if (singleDir.delete()) {System.out.println("单级文件夹 " + singleDirPath + " 删除成功");} else {System.out.println("单级文件夹 " + singleDirPath + " 删除失败");}// 删除多级文件夹,同样要求各级文件夹为空if (multiDir.delete()) {System.out.println("多级文件夹 " + multiDirPath + " 删除成功");} else {System.out.println("多级文件夹 " + multiDirPath + " 删除失败");}}
}
注意事项:
- createNewFile():
- 如果当前路径表示的文件原本是不存在的,则创建成功并返回 true
- 如果当前路径表示的文件原本是存在的,则创建失败并返回 false
- 如果父路径是不存在的,那么方法会有 IOException 异常
- 创建的一定是文件,如果路径中不包含后缀名,则创建一个没有后缀的文件
- mkdir():Windows 当中路径是唯一的,如果当前路径已经存在,则创建失败并返回 false
- mkdir():既可以创建单级文件夹,又可以创建多级文件夹
- delete():
- 如果删除的是文件,直接删除,不进入回收站
- 如果删除的是空文件夹,直接删除,不进入回收站
- 如果删除的是有内容的文件夹,则删除失败
获取并遍历
public File[] listFiles()
获取当前该路径下所有内容
import java.io.File;public class ListFilesExample {public static void main(String[] args) {// 指定要遍历的目录路径,可以根据需要修改File directory = new File("MyFiles");// 检查该 File 对象是否代表一个目录if (directory.isDirectory()) {// 调用 listFiles() 方法获取目录下的所有文件和子目录File[] files = directory.listFiles();// 检查返回的数组是否为空if (files != null) {// 遍历数组并输出每个文件或目录的名称for (File file : files) {if (file.isDirectory()) {System.out.println("目录: " + file.getName());} else {System.out.println("文件: " + file.getName());}}} else {System.out.println("无法获取目录内容,可能发生 I/O 错误。");}} else {System.out.println("指定的路径不是一个目录。");}}
}
注意事项:
- 当调用者 File 表示的路径不存在时,返回 null
- 当调用者 File 表示的路径是文件时,返回 null
- 当调用者 File 表示的路径是一个空文件夹时,返回一个长度为 0 的数组
- 当调用者 File 表示的路径是一个有内容的文件夹时,将里面所有文件和文件夹的路径放在 File 数组中返回
- 当调用者 File 表示的路径是一个有隐藏文件的文件夹时,将里面所有文件和文件夹的路径放在 File 数组中返回,包含隐藏文件
- 当调用者 File 表示的路径是需要权限才能访问的文件夹时,返回 null