Java中File文件类操作使用方法大全
- File类概述
- File类的常用API
- 判断文件类型、获取文件信息
- 创建文件、删除文件功能
- 遍历文件夹
- File类相关的API的练习题
File类概述
File类在包java.io.File下、代表操作系统的文件对象(文件、文件夹)。
File类提供了诸如:定位文件,获取文件本身的信息、删除文件、创建文件(文件夹)等功能。
File类创建对象
方法名称 | 说明 |
public File (String pathname) | 根据文件路径创建文件对象 |
public File (String parent, String child) | 从父路径名字符串和子路径名字符串创建文件对象 |
public File (File parent, String child) | 根据父路径对应文件对象和子路径名字符串创建文件对象 |
绝对路径和相对路径
绝对路径:从盘符开始 ,File file1 = new File(“D:\\itheima\\a.txt”);
相对路径:不带盘符,默认直接到当前工程下的目录寻找文件。File file3 = new File(“模块名\\a.txt”);
代码测试案例:
import java.io.File;
public class FileDemo1 {
public static void main(String[] args) {
// 1. 创建File对象(指定文件的路径)
// 绝对路径有三种方法:
// E:\resourse\4.jpg 但是这种的斜杠需要进行转义,原因在于\n,\t等,为了告诉\它本身是\,所以一般写成\\
// E:/resorse/4.jpg 这种方式就不需要再进行斜杠专业了
// 使用File.separator或者文件夹之间的连接
// File file1 = new File("E:\\resourse\\4.jpg");
// File file1 = new File("E:/resourse/4.jpg");
File file1 = new File("E:" + File.separator + "resourse" + File.separator + "4.jpg");
long size1 = file1.length();
System.out.println(size1);
System.out.println("==================================");
// 2、 File创建文件对象,支持绝对路径和相对路径两种方式--重点掌握
File file2 = new File("E:\\resourse\\test.txt");
System.out.println(file2.length());
// 相对路径:一般定位模块中的文件,相对到moudle工程下面
File file3 = new File("Day10/src/test.txt");
File file4 = new File(".../test.txt");
System.out.println(file3.length());
System.out.println(file4.exists());
System.out.println(file4.length());
System.out.println(file3.canRead());
System.out.println("==================================");
// 3、File创建对象,可以是文件也可以是一个文件夹
File file = new File("E:\\resourse");
System.out.println(file.exists()); // true
System.out.println(file.length()); // 不可以直接获取文件夹的大小,要想获取文件夹的大小,需要依次遍历文件夹中的文件
System.out.println(file.isFile()); // false
System.out.println(file.isDirectory()); // true
String name = file.getName();
System.out.println(name);
}
}
问题1、File类的作用?创建对象定位文件,可以删除、获取文件信息等。但是不能读写文件内容
。
问题2、File类构建对象的方式 ?File file = new File(“文件/文件/绝对路径/相对路径”)
;
问题3、绝对路径和相对路径是什么样的?绝对路径是带盘符的,依赖当前系统。相对路径是不带盘符的,默认相对到工程下开始寻找文件
。
File类的常用API
判断文件类型、获取文件信息
File类的判断文件类型、获取文件信息功能:
方法名称 | 说明 |
public boolean isDirectory() | 测试此抽象路径名表示的File是否为文件夹 |
public booleean isFile() | 测试此抽象路径名表示的File是否为文件 |
public boolean exists() | 测试此抽象路径名表示的File是否存在 |
public String getAbsolutePath() | 返回此抽象路径名的绝对路径名字符串 |
public String getPath() | 将此抽象路径名转换为路径名字符串 |
public String getName() | 返回由此抽象路径名表示的文件或文件夹的名称 |
public long lastModified() | 返回文件最后修改的时间毫秒值 |
public File (String parent, String child) | 从父路径名字符串和子路径名字符串创建文件对象 |
public File (File parent, String child) | 根据父路径对应文件对象和子路径名字符串创建文件对象 |
代码测试案例:
import java.io.File;
import java.text.SimpleDateFormat;
/**
目标:File类的获取功能的API
- public String getAbsolutePath() :返回此File的绝对路径名字符串。
- public String getPath() : 获取创建文件对象的时候用的路径
- public String getName() : 返回由此File表示的文件或目录的名称。
- public long length() : 返回由此File表示的文件的长度。
*/
public class FileDemo2 {
public static void main(String[] args) {
// 1.绝对路径创建一个文件对象
File file = new File("E:/resource/test.txt"); // 斜杆方向的盘符就不用再加上转义的斜杠了
// a.获取它的绝对路径。
File absoluteFile = file.getAbsoluteFile();
System.out.println(absoluteFile); // E:/resource/test.txt
// b.获取文件定义的时候使用的路径。
String path = file.getPath();
System.out.println(path); // E:/resource/test.txt
// c.获取文件的名称:带后缀。
String name = file.getName();
System.out.println("文件名称:" + name); // 文件名称:test.txt
// d.获取文件的大小:字节个数。
System.out.println("文件大写为:" + file.length()); // 7
// e.获取文件的最后修改时间
long l = file.lastModified();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SS");
String format = sdf.format(l);
System.out.println("时间日期为:" + format); // 2022-04-23 23:16:47:559
// f、判断文件是文件还是文件夹
System.out.println(file.isFile()); // true
System.out.println(file.isDirectory()); // false
System.out.println("---------------------------------------------------------");
File file1 = new File("Day10\\src\\test.txt"); // 相对路径
// a.获取它的绝对路径。
File absoluteFile1 = file1.getAbsoluteFile();
System.out.println(absoluteFile1); // D:\JavaProMax_day13\Day10\src\test.txt
// b.获取文件定义的时候使用的路径。
String path1 = file1.getPath();
System.out.println(path1); // Day10\src\test.txt
// c.获取文件的名称:带后缀。
String name1 = file1.getName();
System.out.println(name1); // test.txt
// d.获取文件的大小:字节个数。
long length = file1.length();
System.out.println(length); // 46
// e.获取文件的最后修改时间
System.out.println(new SimpleDateFormat("yyyy/MM//dd HH:mm:ss:SS").format(file1.lastModified())); // 2022/04//29 15:12:08:601
// f、判断文件是文件还是文件夹
System.out.println(file.isFile()); // true
System.out.println(file.isDirectory()); // false
System.out.println("-------------------------");
File file3 = new File("D:/");
System.out.println(file3.isFile()); // false
System.out.println(file3.isDirectory()); // true
System.out.println(file3.exists()); // true
System.out.println("-------------------------");
File file4 = new File("D:/aaa"); // 不存在该文件或者文件夹
System.out.println(file4.isFile()); // false
System.out.println(file4.isDirectory()); // false
System.out.println(file4.exists()); // false
}
}
创建文件、删除文件功能
File类创建文件的功能
方法名称 | 说明 |
public boolean createNewFile() | 创建一个新的空的文件 |
public boolean mkdir() | 只能创建一级文件夹 |
public boolean mkdirs() | 可以创建多级文件夹 |
File类删除文件的功能
方法名称 | 说明 |
public boolean delete() | 删除由此抽象路径名表示的文件或空文件夹 |
注意:delete方法默认只能删除文件和空文件夹,delete方法直接删除不走回收站
。
代码实现:
import java.io.File;
import java.io.IOException;
/**
目标:File类的创建和删除的方法
- public boolean createNewFile() :当且仅当具有该名称的文件尚不存在时,
创建一个新的空文件。 (几乎不用的,因为以后文件都是自动创建的!)
- public boolean delete() :删除由此File表示的文件或目录。 (只能删除空目录)
- public boolean mkdir() :创建由此File表示的目录。(只能创建一级目录)
- public boolean mkdirs() :可以创建多级目录(建议使用的)
*/
public class FileDemo3 {
public static void main(String[] args) throws IOException {
// a.创建新文件,创建成功返回true ,反之 ,不需要这个,以后文件写出去的时候都会自动创建
File f = new File("Day10\\src\\test.txt");
boolean newFile = f.createNewFile(); // 在相对路径Day10\src下创建text.txt文件,如果存在创建失败,反之成功
System.out.println(newFile);
File f1 = new File("Day10\\src\\test2.txt");
boolean newFile1 = f1.createNewFile(); //
System.out.println(newFile1);
// b.mkdir创建一级目录
File file = new File("E:\\aaaaaa");
boolean mkdir = file.mkdir();
System.out.println(mkdir);
// c.mkdirs创建多级目录(重点)
File file1 = new File("E:/abc/efg/hig/eng");
boolean mkdirs = file1.mkdirs();
System.out.println(mkdirs);
// d.删除文件或者空文件夹
// 占用一样可以删除
System.out.println(file.delete()); // true
// 只能删除空文件夹,不能删除非空文件夹.
System.out.println(file1.delete()); //
}
}
问题1:创建多级目录使用哪个方法?public boolean mkdirs()
问题2:删除文件需要注意什么?可以删除文件、空文件夹。默认不能删除非空文件夹。
遍历文件夹
File类的遍历功能
方法名称 | 说明 |
public String[] list() | 获取当前目录下所有的"一级文件名称"到一个字符串数组中去返回。 |
public File[] listFiles()(常用) | 获取当前目录下所有的"一级文件对象"到一个文件对象数组中去返回(重点 |
listFiles方法注意事项:
1、当调用者不存在时,返回null;
2、当调用者是一个文件时,返回null;
3、当调用者是一个需要权限才能进入的文件夹时,返回null;
4、当调用者是一个空文件夹时,返回一个长度为0的数组
5、当调用者是一个有内容的文件夹时,将里面所有文件和文件夹的路径放在File数组中返回
6、当调用者是一个有隐藏文件的文件夹时,将里面所有文件和文件夹的路径放在File数组中返回,包含隐藏内容
测试代码:
import java.io.File;
import java.util.Arrays;
/**
目标:File针对目录的遍历
- public String[] list(): 获取当前目录下所有的"一级文件名称"到一个字符串数组中去返回。
- public File[] listFiles()(常用): 获取当前目录下所有的"一级文件对象"到一个文件对象数组中去返回(重点)
*/
public class FileDemo4 {
public static void main(String[] args) {
// 1. 定位一个目录,要是一个文件会返回null
File file = new File("E:/resourse");
String[] names = file.list();
for(String str : names){
System.out.println(str);
}
System.out.println("------------------------------");
// 2. 一级文件对象,
// 获取当前目录下所有的一级文件对象到一个文件对象数组中去返回
File[] files = file.listFiles();
for(File fileList : files){
System.out.println(fileList + "--" + fileList.length());
}
System.out.println("------------------------------------"
);
// 3. 注意事项
File file1 = new File("G:/"); // 调用者不存在返回null
File[] files1 = file1.listFiles();
String[] list = file1.list();
System.out.println(list); // null
System.out.println(files1); // null
System.out.println("-------------------------------");
File file2 = new File("Day10\\src\\test.txt"); // 调用者是一个文件的时候返回null
File[] files2 = file2.listFiles();
String[] list1 = file2.list();
System.out.println(list1); // null
System.out.println(files2); // null
System.out.println("================================");
File file3 = new File("E:\\aaaa"); // 调用者是一个空的文件夹时候,返回空的数组
File[] files3 = file3.listFiles();
String[] list2 = file3.list();
System.out.println(files3); // 地址
System.out.println(list2); // 地址
System.out.println(Arrays.toString(list2)); // []
System.out.println(Arrays.toString(files3)); // []
}
}
File类相关的API的练习题
需求1:统计一个文件夹中每种文件的个数并打印。
打印格式如下:
txt:3个
doc:4个
jpg:6个
例如统计E盘下的文件信息:
代码实现:
import java.io.File;
public class Test {
public static void main(String[] args) {
// 访问一个文件夹
File file = new File("E:/resource");
int txtCount = 0, jpgCount = 0, docCount = 0, otherCount = 0;
String[] list = file.list(); // 获取当前目录下所有的”一级文件名称“到一个字符串数组中
// 增强for循环遍历数组
for (String name : list){
if(name.endsWith("txt")){ // 调用String类的endsWith(String str)函数表示是否以str结尾,如果是返回true
txtCount++;
}else if(name.endsWith("doc")){
docCount++;
}else if(name.endsWith("jpg")){
jpgCount++;
}else {
otherCount++;
}
}
System.out.println("txt: " + txtCount);
System.out.println("jpg: " + jpgCount);
System.out.println("doc: " + docCount);
System.out.println("other: " + otherCount);
}
}
实验结果:
需求2:将某个文件夹下的一级文件对象,按照最近修改时间降序展示,并显示修改时间。
打印格式如下:
aaa.txt: 2021-03-22 10:23:23
dlei.doc: 2021-03-21 8:23:23
meinv.jpg:6个 2008-11-11 11:11:11
代码实现:
import java.io.File;
import java.text.SimpleDateFormat;
public class Test1 {
public static void main(String[] args) {
File file = new File("E:/resource");
File[] files = file.listFiles(); // 获取当前目录下所有的一级文件对象到一个文件对象数组中
// 冒泡排序
for (int i = 0; i < files.length-1; i++) {
for (int j = i+1; j < files.length; j++) {
if(files[i].lastModified() < files[j].lastModified()){
File temp = files[i];
files[i] = files[j];
files[j] = temp;
}
}
}
// 打印信息
for(File tempFile : files){
System.out.println(tempFile.getName() + ": " + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(tempFile.lastModified()));
}
}
}
实验结果: