1 File简述
File对象表示一个路径。
-
该路径可以是文件的路径,也可以是文件夹的路径。
-
该路径可以是已经存在的,也可以是不存在的。
导包: java.io.File
2 File构造方法
| 方法 | 说明 |
|---|---|
public File(String pathName) | 根据文件路径创建文件对象 |
public File(String parent, String child) | 根据父路径和子路径创建文件对象 |
public File(File parent, String child) | 根据父路径对应文件对象和子路径创建文件对象 |
说明:
-
父(级)路径,子(级)路径:如路径
C:\a\b\c.txt,其中C:\a\b就是父级路径,c.txt就是子级路径。 -
构造File对象时,既可以传入绝对路径,也可以传入相对路径。绝对路径是以根目录开头的完整路径,例如:
File f = new File("D:\\IDEA\\test.txt");注意Windows平台使用
\作为路径分隔符,在Java字符串中需要用\\表示一个\。
import java.io.File;
public class FileDemo1 {
public static void main(String[] args) {
//根据文件路径创建文件对象
String pathName = "D:\\IDEA\\test.txt";
File file1 = new File(pathName);
System.out.println(file1); // D:\IDEA\test.txt
//根据父路径和子路径创建文件对象
String parent1 = "D:\\IDEA";
String child1 = "test.txt";
File file2 = new File(parent1, child1);
System.out.println(file2); // D:\IDEA\test.txt
//根据父路径对应文件对象和子路径创建文件对象
String parent2 = "D:\\IDEA";
File parent2File = new File(parent2);
String child2 = "test.txt";
File file3 = new File(parent2File, child2);
System.out.println(file3); // D:\IDEA\test.txt
}
}
3 File常用成员方法
3.1 判断
| 方法 | 说明 |
|---|---|
boolean isDirectory() | 判断此路径名表示的File是否为文件夹 |
boolean isFile() | 判断此路径名表示的File是否为文件 |
boolean exists() | 判断此路径名表示的File是否存在 |
创建如下文件及文件夹

import java.io.File;
public class FileDemo2 {
public static void main(String[] args) {
File file1 = new File("D:\\test\\aaa.txt"); //文件
File file2 = new File("D:\\test\\bbb"); //文件夹
File file3 = new File("D:\\test\\ccc"); //不存在的路径名
System.out.println(file1.isDirectory());//false
System.out.println(file1.isFile()); //true
System.out.println(file1.exists()); //true
System.out.println(file2.isDirectory());//true
System.out.println(file2.isFile()); //false
System.out.println(file2.exists()); //true
System.out.println(file3.isDirectory());//false
System.out.println(file3.isFile()); //false
System.out.println(file3.exists()); //false
}
}
3.2 获取
| 方法 | 说明 |
|---|---|
long length() | 返回文件的大小(不能直接获取文件夹)。单位:字节 |
String getAbsolutePath() | 返回文件的绝对路径 |
String getPath() | 返回定义文件时使用的路径 |
String getName() | 返回文件带后缀的名称,或者返回文件夹的名称。 |
long lastModified() | 返回文件最后修改的时间。单位:毫秒值 |
File getParentFile() | 返回文件以父级路径创建的文件对象 |
创建如下文件及文件夹



import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
public class FileDemo3 {
public static void main(String[] args) {
File file1 = new File("D:\\test\\aaa.txt"); //D:\test里的文件
File file2 = new File("D:\\test\\bbb"); //D:\test里的文件夹
File file3 = new File("do24File\\aaa.txt"); //项目下的文件夹
//返回文件的大小
System.out.println(file1.length()); //文件大小:3
System.out.println(file2.length()); //文件夹大小:0。该方法不能直接返回文件夹大小。
//返回文件的绝对路径
System.out.println(file1.getAbsoluteFile()); //D:\test\aaa.txt
System.out.println(file3.getAbsoluteFile()); //D:\IDEA\StudyJAVA\do24File\aaa.txt
//返回定义文件时使用的路径
System.out.println(file1.getPath()); //D:\test\aaa.txt
System.out.println(file3.getPath()); //do24File\aaa.txt
//返回文件带后缀的名称,或者返回文件夹的名称。
System.out.println(file1.getName()); //aaa.txt
System.out.println(file2.getName()); //bbb
//返回文件最后修改的时间。单位:毫秒值
long time = file1.lastModified();
System.out.println(time); //1672048639864
Date date = new Date(time);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日, HH:mm:ss");
String format = sdf.format(date);
System.out.println(format); //2022年12月26日, 17:57:19
//返回文件的父级路径
File parentFile = file1.getParentFile();
System.out.println(parentFile); //D:\test
}
}
3.3 创建、删除
| 方法 | 说明 |
|---|---|
boolean createNewFile() | 创建一个新的空文件 |
boolean mkdir() | 创建单级文件夹 |
boolean mkdirs() | 创建单级或多级文件夹 |
boolean delete() | 删除文件或空文件夹(直接删除不进回收站) |
方法 createNewFile() 的3个注意点:
- 如果当前路径表示的文件是不存在的,则会在当前路径创建指定文件,返回true。如果已经存在,不创建文件,返回false。
验证:
先创建如下文件及文件夹:

执行如下代码:
public class FileDemo4 {
public static void main(String[] args) throws IOException {
File file1 = new File("D:\\test\\ccc.txt");
System.out.println(file1.createNewFile());
}
}
第一次执行,输出 true ,并且在指定目录下创建了指定的文件

再次执行,输出 false 。
- 如果父级路径不存在,则会抛出异常
IOException
public class FileDemo4 {
public static void main(String[] args) throws IOException {
File file1 = new File("D:\\test\\ccc\\ccc.txt"); //ccc文件夹是不存在的
System.out.println(file1.createNewFile());
//Exception in thread "main" java.io.IOException: 系统找不到指定的路径。
}
}
createNewFile创建的一定是文件。如果路径不包含后缀名,则创建一个没有后缀名的文件。
public class FileDemo4 {
public static void main(String[] args) throws IOException {
File file1 = new File("D:\\test\\ccc");
System.out.println(file1.createNewFile()); //true
}
}

3.4 获取并遍历
| 方法 | 说明 |
|---|---|
static File[] listRoots() | 获取系统中所有可用盘符 |
String[] list() | 获取当前路径下的全部内容 |
String[] list(FilenameFilter filter) | 利用文件名过滤器获取当前路径下的内容 |
File[] listFiles() ⭐ | 获取当前路径下的全部内容 |
File[] listFiles(FileFilter filter) | 利用文件名过滤器获取当前路径下的内容 |
File[] listFiles(FilenameFilter filter) | 利用文件名过滤器获取当前路径下的内容 |
方法 listFiles() 注意:
- 当调用者File表示的路径不存在时,返回null
- 当调用者File表示的路径是文件时,返回null
- 当调用者File表示的路径是需要权限才能访问的文件夹时,返回null
- 当调用者File表示的路径是空文件夹时,返回一个长度为0的File类型数组
- 当调用者File表示的路径是有内容的文件夹时,返回包含所有文件路径和文件夹路径的File类型数组(包含隐藏文件)
创建如下文件及文件夹:

public class FileDemo5 {
public static void main(String[] args) {
File file = new File("D:\\test");
File[] files = file.listFiles();
for (File file1 : files) {
System.out.print(file1 + ", ");
//D:\test\aaa, D:\test\aaa.txt, D:\test\bbb, D:\test\bbb.txt,
}
}
}
4 常用操作
所有操作均可按以下步骤实现:
- 进入文件夹
- 遍历文件夹
- 判断是否为文件,并执行相关操作
- 判断是否为文件夹,并执行相关操作
4.1 删除多级目录
public class Demo {
private static void deleteFiles(File file) {
//1.进入文件夹
File[] files = file.listFiles();
//2.遍历文件夹
for (File f : files) {
if (f.isFile()) {
//3.如果是文件,直接删除
f.delete();
} else {
//4.如果是文件夹,递归
deleteFiles(f);
}
}
file.delete();
}
}
4.2 计算文件夹大小
public class Demo {
private static long getLength(File file) {
long len = 0;
File[] files = file.listFiles();
for (File f : files) {
if (f.isFile()) {
//如果是文件,直接获取大小并累加
len += f.length();
} else {
//如果是文件夹,递归获取大小并累加
len += getLength(f);
}
}
return len;
}
}
4.3 统计各种文件的数量
public class Demo {
private static HashMap<String, Integer> getCount(File file) {
HashMap<String, Integer> hm = new HashMap<>();
File[] files = file.listFiles();
for (File f : files) {
//如果是文件,直接获取后缀名并统计
if (f.isFile()) {
String[] split = f.getName().split("\\.");
if (split.length >= 2) {
String endName = split[split.length - 1];
if (hm.containsKey(endName)) {
int count = hm.get(endName);
count++;
hm.put(endName, count);
} else {
hm.put(endName, 1);
}
}
}
//如果是文件夹,递归并统计数量并累加
else {
HashMap<String, Integer> sonMap = getCount(f);
Set<Map.Entry<String, Integer>> entries = sonMap.entrySet();
for (Map.Entry<String, Integer> entry : entries) {
String endName = entry.getKey();
int value = entry.getValue();
if (hm.containsKey(endName)) {
int count = hm.get(endName);
count += value;
hm.put(endName, count);
} else {
hm.put(endName, 1);
}
}
}
}
return hm;
}
}
本文介绍了Java中的File类,用于表示文件和目录路径名。File类提供了多种构造方法来创建文件对象,包括基于路径名、父路径和子路径等。文章详细讲解了File对象的常用方法,如判断文件/目录存在、获取文件属性(大小、路径、名称、最后修改时间)以及创建、删除文件和目录。此外,还讨论了如何遍历文件夹内容和进行文件操作,如删除多级目录、计算文件夹大小以及统计文件数量。
751

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



