一、File 类概述
我们在使用 IO 流读写和写入数据时,就需要知道电脑本地的文件是以什么形式存在的,只有保证文件真实存在才可以顺利的进行 IO 操作。为了保证程序文件的可操作性,Java 提供了 File 类,其中定义了一些操作文件的方法,便于我们在开发中使用。
- JAVA.IO.File类
- 概述:文件和目录(文件夹)路径名的抽象表示形式
1、File类中的构造方法
- 构造方法:
- File(String pathname):根据一个路径得到File对象
- File(String parent, String child):根据一个目录和一个子文件/目录得到File对象
- File(File parent, String child):根据一个父File对象和一个子文件/目录得到File对象
Demo代码示例:
public class FileDemo {
public static void main(String[] args) {
// File(String pathname):根据一个路径得到File对象
// 把e:\\adu\\a.txt封装成一个File对象
File file = new File("E:\\adu\\a.txt");
// File(String parent, String child):根据一个目录和一个子文件/目录得到File对象
File file2 = new File("E:\\adu", "a.txt");
// File(File parent, String child):根据一个父File对象和一个子文件/目录得到File对象
File file3 = new File("e:\\adu");
File file4 = new File(file3, "a.txt");
// 以上三种方式其实效果一样
}
}
2、File类中的成员方法
- 创建功能:
- public boolean createNewFile():创建文件,查看当前路径下是否存在想要创建的文件,如果存在就不创建,方法返回 false。如果不存在就将文件创建出来,方法返回 true。
- public boolean mkdir():创建文件夹,查看当前路径下是否存在想要创建的文件,如果存在就不创建,方法返回 false。如果不存在就将文件创建出来,方法返回 true。
- public boolean mkdirs():创建多级文件夹,查看当前路径下是否存在想要创建的多级文件夹。如果存在就不创建,方法返回 false。如果不存在就将整个多级文件夹创建出来或者将多级文件夹补齐,方法返回 true。
Demo 代码示例:
public class FileDemo {
public static void main(String[] args) throws IOException {
// 在g盘目录下创建一个文件夹adu
File file = new File("C:\\adu");
System.out.println("mkdir:" + file.mkdir());
// 在g盘目录adu下创建一个文件a.txt
File file2 = new File("C:\\adu\\a.txt");
System.out.println("createNewFile:" + file2.createNewFile());
// 创建多级目录
File file3 = new File("C:\\aaa\\bbb\\ccc\\ddd");
System.out.println("mkdirs:" + file3.mkdirs());
}
}
- 删除功能
- public boolean delete()
- 使用删除功能操作文件时需要注意几点:
- Java将文件删除是不走回收站的,可以理解为“彻底删除”。
- 如果你创建文件或者文件夹忘了写盘符路径,那么,默认在项目路径下。
- 要删除一个文件夹,请注意该文件夹内不能包含文件或者文件夹,否则会删除失败。
- 使用删除功能操作文件时需要注意几点:
- public boolean delete()
Demo 代码示例:
public class FileDemo {
public static void main(String[] args) throws IOException {
// 在C盘目录下创建一个文件夹adu
File file = new File("C:\\adu");
System.out.println("mkdir:" + file.mkdir());
//delete() 将对象指定路径的文件删除
boolean delete = file7.delete();//delete() 将对象指定路径的文件删除
System.out.println(delete);
}
}
- 重命名功能:
- public boolean renameTo(File dest)
Demo代码示例:
public class FileDemo {
public static void main(String[] args) {
// 创建一个文件对象
File file = new File("g:\\A.jpg");//这一步是指定需要修改的路径
// 需求:我要修改这个文件的名称为"B.jpg"
File newFile = new File("g:\\B.jpg");//这一步是定义需要修改的名字
System.out.println("renameTo:" + file.renameTo(newFile));//renameTo()文件重命名方法
}
}
- 判断功能
- public boolean isDirectory():判断是否是目录
- public boolean isFile():判断是否是文件
- public boolean exists():判断文件是否存在
- public boolean canRead():判断文件是否可读
- public boolean canWrite():判断文件是否可写
- public boolean isHidden():判断文件是否隐藏
Demo代码示例:
public class FileDemo {
public static void main(String[] args) {
// 创建文件对象//我们选择G盘已存在的a.txt
File file = new File("C:\\AAA");
System.out.println("isDirectory:" + file.isDirectory());
System.out.println("isFile:" + file.isFile());
System.out.println("exists:" + file.exists());
System.out.println("canRead:" + file.canRead());
System.out.println("canWrite:" + file.canWrite());
System.out.println("isHidden:" + file.isHidden());
}
}
运行结果:
- 获取功能(基本获取功能)
- public String getAbsolutePath():获取绝对路径
- public String getPath():获取相对路径
- public String getName():获取名称
- public long length():获取长度。字节数
- public long lastModified():获取最后一次的修改时间,毫秒值
Demo代码示例:
public class FileDemo {
public static void main(String[] args) {
// 创建文件对象
File file = new File("C:\\adu\\a.txt");
System.out.println("getAbsolutePath:" + file.getAbsolutePath());
System.out.println("getPath:" + file.getPath());
System.out.println("getName:" + file.getName());
System.out.println("length:" + file.length());
System.out.println("lastModified:" + file.lastModified());
//1472893011393
Date d = new Date(1472893011393L);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String s = sdf.format(d);
System.out.println(s);
}
}
运行结果:
- 获取功能(高级获取功能)
- public String[] list():获取指定目录下的所有文件或者文件夹的名称数组
- public File[] listFiles():获取指定目录下的所有文件或者文件夹的File数组
public class FileDemo {
public static void main(String[] args) {
// 指定一个目录
File file = new File("C:\\");
// public String[] list():获取指定目录下的所有文件或者文件夹的名称数组
String[] strArray = file.list();
for (String s : strArray) {
System.out.println(s);
}
System.out.println("------------");
// public File[] listFiles():获取指定目录下的所有文件或者文件夹的File数组
File[] fileArray = file.listFiles();
for (File f : fileArray) {
System.out.println(f.getName());
}
}
}
3、文件过滤器和文件遍历器的实现
文件过滤器:查询C盘根目录后缀为.log的文件
public class FileDemo {
public static void main(String[] args) {
// 封装C 判断目录
File file = new File("C:\\");
// 获取该目录下所有文件或者文件夹的String数组
// public String[] list(FilenameFilter filter)
String[] strArray = file.list(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
//如果是文件,输出以.jpg结尾的文件,这两个条件要同时满足
return new File(dir, name).isFile() && name.endsWith(".log");
}
});
// 遍历
for (String s : strArray) {
System.out.println(s);
}
}
}
文件遍历器:利用递归查询C盘下所有的文件
/**
* 递归练习:使用递归列出windows目录下的所有文件夹及所有文件(不包括隐藏目录及文件)
*/
public class FileRecursion {
public static void main(String[] args) {
getAllFile(new File("c:\\windows"));
}
public static void getAllFile(File dir) {
File[] files = dir.listFiles();
if (files != null) {
for (File f : files) {
// 如果获取的File类型是目录,则进行递归调用
if (f.isDirectory()) {
System.out.println("目录:" + f);
getAllFile(f);
} else {
// 如果获取的File类型是文件,则直接打印输出
System.out.println("文件:" + f);
}
}
}
}
}