Java IO流06:File类和FileFilter接口
File类
File类代表物理盘符中的一个文件或文件夹
其不具有从文件读取信息和向文件写入信息的功能,它仅描述文件本身的属性
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
public class Main{
/**
* 创建文件时必须抛出异常
*/
public static void main(String[] args) throws IOException {
/**
* File.pathSeparator生成路径分隔符;
*/
System.out.println("路径分隔符" + File.pathSeparator);
/**
* File.separator生成名称分隔符\
*/
System.out.println("名称分隔符" + File.separator);
/**
* 先创建File类的对象,才能对文件进行操作
*/
File f1 = new File("1.txt");
File f2 = new File("1");
File f3 = new File(".");
/**
* exists()方法判断文件或目录是否存在
*/
if (!f1.exists()) {
/**
* createNewFile()方法创建文件,返回true
*/
System.out.println(f1.createNewFile());
}
/**
* mkdir()方法创建目录,返回true
* mkdirs()方法可以创建多级目录
*/
System.out.println(f2.mkdirs());
/**
* isDirectory()方法判断是否是目录
*/
System.out.println(f2.isDirectory());
/**
* delete()方法删除文件或目录,返回true
* 只能删除空目录,多级目录只能删除最里层那个
*/
System.out.println(f2.delete());
/**
* isFile()方法判断是否是文件
*/
System.out.println(f1.isFile());
/**
* getName()方法获取文件名
*/
System.out.println(f1.getName());
/**
* getPath()方法获取文件相对路径
*/
System.out.println(f1.getPath());
/**
* getAbsolutePath()方法获取文件绝对路径
*/
System.out.println(f1.getAbsolutePath());
/**
* length()方法获取文件大小
*/
System.out.println(f1.length());
/**
* canWrite()方法判断文件是否可写
*/
System.out.println(f1.canWrite());
/**
* list()方法返回当前路径下所有文件和文件夹的名称,保存为字符串数组
*/
System.out.println(Arrays.toString(f3.list()));
}
}
FileFilter接口
当调用File类中的listFiles()方法时,支持传入FileFilter接口实现类的对象作为参数,对获取的文件进行过滤
import java.io.File;
import java.io.FileFilter;
public class Main{
public static void main(String[] args) {
File f2 = new File("1");
System.out.println(f2.mkdir());
/**
* 在参数中实现FileFilter接口,重写accept()方法,自定义选择文件的条件,返回一个File类型数组
*/
File[] files = f2.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
if (pathname.getName().endsWith(".jpg")) {
return true;
}
return false;
}
});
for (File f : files){
System.out.println(f.getName());
}
}
}
练习:递归打印文件夹所有文件路径,和删除所有文件
import java.io.File;
public class Main{
public static void main(String[] args) {
File file = new File("d:\\JAVA");
deleteFile(file);
}
/**
* 创建一个递归函数,递归打印和删除文件
*/
public static void deleteFile(File file){
File[] list = file.listFiles();
if (list != null){
for (File fi : list) {
/**
* 采用递归判断子文件是否为目录
*/
if (fi.isDirectory()){
deleteFile(fi);
}
else {
System.out.println(fi.getName());
System.out.println(fi.delete());
}
}
}
/**
* 先把所有文件删除以后,才能删除目录
*/
System.out.println(file.delete());
}
}