File类时java.io包中用来操作文件的类,通过调用File类的方法,可实现创建、删除、重命名文件等功能,使用File类的对象可以获取文件的基本信息,如文件所在的目录、文件名、文件大小、文件修改时间等。
1.创建文件对象
使用File类的构造方法能够创建文件对象,常用的File类构造方法有如下3种:
- File(String pathname):根据传入的路径名称创建文件对象;
- pathname:被传入的路径名称(包含文件夹)
例如,在C盘的根目录下创建文本文件1.txt,代码如下:
File file = new File("C:\\1.txt");
- File(String parent,String child):根据传入的父路径(磁盘根目录或磁盘中的某一个文件夹)和子路径(文件名)创建文件对象;
- parent:父路径(磁盘根目录或磁盘中的某一个文件夹),例如C:\或C:\Demo\
- child:子路径(文件名),例如1.txt
例如,在C盘的Demo文件夹中创建文本文件1.txt,代码如下:
File file = new File("C:\\Demo\\","1.txt");
- File(File f,String child):根据传入的父文件对象(磁盘中的某一个文件夹)和子路径(文件名)创建文件对象;
- parent:父路径(磁盘根目录或磁盘中的某一个文件夹),例如C:\或C:\Test\
- child:子路径(文件名),例如1.txt
例如,在C盘的Test文件夹中,再在Test文件夹中创建文本文件1.txt,代码如下:
File folder = new File("C:\\Test\\");
File file = new File(folder,"1.txt");
注意:对于Windows平台,文件路径用"\\"表示,(即"\"的转义字符)
2.文件操作
File类提供了操作文件的相应办法,常见的文件操作主要包括判断文件是否存在、创建文件、重命名文件、删除文件以及获取文件基本信息等,File类中操作文件的常用方法及说明如下表:
方法 | 返回值 | 说明 |
---|---|---|
canRead() | boolean | 判断文件是否可读 |
canWrite() | boolean | 判断文件是否可写 |
createNewFile() | boolean | 当且仅当不存在具有指定名称的文件时,创建一个新的空文件 |
createTempFile(String prefix,String suffix) | File | 在默认临时文件夹中创建一个空文件,使用给定前缀和后缀生成其名称 |
createTempFile(String prefix,String suffix,directory) | File | 在指定文件夹中创建一个新空文件,使用给定的前缀和后缀字符串生成其名称 |
delete() | boolean | 删除指定的文件或文件夹 |
exists() | boolean | 测试指定的文件或文件夹是否存在 |
getAbsoluteFile() | File | 返回抽象路径名的绝对路径形式(文件或文件夹) |
getAbsolutePath() | String | 获取文件或文件夹的绝对路径 |
getName() | String | 获取文件或文件夹的名称 |
getParent() | String | 获取文件或文件夹的父路径 |
getFreeSpace() | long | 返回此抽象路径名指定的分区中未分配的字节数 |
getTotalSpace() | long | 返回此抽象路径名指定的分区大小 |
length() | long | 获取文件的长度(以字节为单位) |
isFile() | boolean | 判断是不是文件 |
isHidden() | boolean | 判断文件是否隐藏 |
lastModified() | long | 获取文件最后修改时间 |
renameTo(File dest) | boolean | 重新命名文件 |
setLastModified(long time) | boolean | 设置文件或文件夹的最后一次修改时间 |
setReadOnly() | boolean | 将文件或文件夹设置为只读 |
toURI() | URI | 构造一个表示此抽象路径名的file:URI |
getPath | String | 获取文件或文件夹的路径名字字符串 |
下面是常用操作文件夹的例子,代码如下:
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class FileTest {
public static void main(String[] args) {
File file = new File("C:\\test.txt"); // 创建文件对象
if (!file.exists()) { // 文件不存在(程序第一次运行时,执行的语句块)
System.out.println("未在指定目录下找到文件名为“test”的文本文件!正在创建...");
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
} // 创建该文件
System.out.println("文件创建成功!");
} else { // 文件存在(程序第二次运行时,执行的语句块)
System.out.println("找到文件名为“test”的文本文件!");
if (file.isFile() && file.canRead()) { // 该文件文件是一个标准文件且该文件可读
System.out.println("文件可读!正在读取文件信息...");
String fileName = file.getName(); // 获得文件名
String filePath = file.getAbsolutePath(); // 获得该文件的绝对路径
boolean hidden = file.isHidden(); // 获得该文件是否被隐藏
long len = file.length(); // 获取该文件中的字节数
long tempTime = file.lastModified(); // 获取该文件最后的修改时间
// 创建SimpleDateFormat对象,指定目标格式
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Date date = new Date(tempTime); // 使用“文件最后修改时间”创建Date对象
String time = sdf.format(date); // 格式化“文件最后的修改时间”
System.out.println("文件名:" + fileName); // 输出文件名
System.out.println("文件的绝对路径:" + filePath); // 输出文件的绝对路径
System.out.println("文件是否是隐藏文件:" + hidden); // 输出文件是否被隐藏
System.out.println("文件中的字节数:" + len); // 输出该文件中的字节数
// 输出该文件最后的修改时间
System.out.println("文件最后的修改时间:" + time);
file.delete(); // 查完该文件信息后,删除文件
System.out.println("这个文件的使命结束了!已经被删除了。");
} else { // 文件不可读
System.out.println("文件不可读!");
}
}
}
}
第一次运行的时候,如果文件不存在将自动创建,如下图:
第二次运行如下图:
注意:在创建File对象时,如果直接写文件名,则创建的文件为于当前项目文件夹中
3.文件夹操作
File类不仅提供了操作文件的相应方法,还提供了了操作文件夹的相应方法,常见的文件夹操作主要包括判断文件夹是否存在、创建文件夹、删除文件夹、获取文件夹中的子文件夹以及文件等。File类中操作文件夹的常用方法如下表:
方法 | 返回值 | 说明 |
---|---|---|
isDirectory() | boolean | 判断是不是文件 |
list() | String[] | 返回字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录 |
list(FilenameFilter filter) | String[] | 返回字符串数组,这些字符串指定此抽象路径名表示的目录中满足指定过滤器的文件和目录 |
listFiles() | File[] | 返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件 |
listFiles(FileFilter filter) | File[] | 返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录 |
listFiles(FilenameFilter filter) | File[] | 返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录 |
mkdir() | boolean | 创建此抽象路径名指定的目录 |
mkdirs() | boolean | 创建此抽象路径名指定的目录,包括所有必须但不存在的父目录 |
下面通过一个实例讲解File类操作文件夹的方法,代码如下:
import java.io.File;
public class FolderTest {
public static void main(String[] args) {
String path = "C:\\Test"; // 声明文件夹Test所在的目录
for (int i = 1; i <= 10; i++) { // 循环获得i值,并用i命名新的文件夹
File folder = new File(path + "\\" + i); // 根据新的目录创建File对象
if (!folder.exists()) { // 文件夹不存在
folder.mkdirs(); // 创建新的文件夹(包括不存在的父文件夹)
}
}
System.out.println("文件夹创建成功,请打开C盘查看!\n\nC盘文件及文件夹列表如下:");
File file = new File("C:\\"); // 根据路径名创建File对象
File[] files = file.listFiles(); // 获得C盘的所有文件和文件夹
for (File folder : files) { // 遍历files数组
if (folder.isFile()) // 判断是否为文件
System.out.println(folder.getName() + " 文件"); // 输出C盘下所有文件的名称
else if (folder.isDirectory()) // 判断是否为文件夹
// 输出C盘下所有文件夹的名称
System.out.println(folder.getName() + " 文件夹");
}
}
}
返回结果:
递归遍历目录,代码如下:
import java.io.File;
public class Test {
public static void main(String[] args) {
File f=new File("C:\\Test");
printFile(f);
}
public static void printFile(File file) {
if(file.isDirectory()) {//判断File对象是否是目录
File [] listFiles=file.listFiles();
for(File temp:listFiles) {
if(temp.isFile()) {
System.out.println("文件:" + temp.getAbsolutePath());
}else if(temp.isDirectory()) {
System.out.println("目录:" + temp.getAbsolutePath());
}
printFile(temp);
}
}
}
}