java.io.File 类
文件和目录路径名的抽象表示形式
java把电脑中的文件和文件夹封装成了一个File类,我们可以使用File类对文件和文件夹进行操作
File类是与系统无关的类,任何一个系统都可以使用它里面的方法
静态修饰符
----static String pathSeparator //路径分隔符,与系统相关的路径分隔符字符,为方便起见,表示为字符串。
—static char pathSeparatorChar //与系统相关的路径分隔符。
—static String separator //文件名称分隔符,与系统相关的默认名称 - 分隔符字符,以方便的方式表示为字符串。
—static char separatorChar //与系统相关的默认名称分隔符。
注:不同的操作系统pathSeparator和separator可能不同,所以路径名使用 “c:”+File.separator+“text” 的方式表示“c:\text”可以兼容不同操作系统
使用类名访问这几个修饰符,测试代码和运行结果如下:
public class text1 {
public static void main(String[] args) {
show1();
}
static void show1() {
//4个静态方法
System.out.println(File.pathSeparator);
System.out.println(File.pathSeparatorChar);
System.out.println(File.separator);
System.out.println(File.separatorChar);
}
}
File 的构造方法
File(String pathname)
File(String pathname) 通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。
- 参数接受一个字符串的路径名称,路径可以是以文件结尾也可以是以文件夹结尾,可以是相对路径也可以是绝对路径
* 路径可以存在也可以不存在,创建File对象,只是把字符串路径封装为File对象,不考虑路径的真假情况
static void show2Constructor () {
File file= new File("F:\\project\\dataStructuresAndAlgorithms\\a.txt");
File file2= new File("a.txt");
System.out.println(file2);
System.out.println(file);
}
File(String parent, String child)
File(String parent, String child) 从父路径名字符串和子路径名字符串创建新的 File实例。
* parent 父路径
* child 子路径
* 使用该方法 父路径和子路径可以单独书写,使用比较灵活,而且父路径和子路径都可以变化
static void show3Constructor (String parent ,String child) {
File file= new File(parent,child);
System.out.println(file);
}
File(File parent, String child)
File(File parent, String child) 从父抽象路径名和子路径名字符串创建新的 File实例。
* parent 父路径
* child 子路径
* 使用该方法 父路径和子路径可以单独书写,使用比较灵活,而且父路径和子路径都可以变化
* 父路径是File类型, 可以用File的方法对路径进行一些操作,再使用路径创建对象
static void show4Constructor ( ) {
File parent = new File("C:\\");
File file = new File(parent,"hello.java");
System.out.println(file);
}
4个 “获取” 方法
— getAbsolutePath() 返回此抽象路径名的绝对路径名字符串。无论构造方法中使用的是绝对路径还是相对路径,getAbsolutePath方法都返回绝对路径。
— getPath() 将此抽象路径名转换为路径名字符串。 getPath返回的是构造方法中的路径
—getName() 返回由此抽象路径名表示的文件或目录的名称。 getName返回路径的结尾部分
— length() 返回由此抽象路径名表示的文件的长度。 ength 以字节为单位返回文件大小,文件夹没有大小(返回0),如果路径不存在,返回0
static void show1Modifier() {
File file= new File("F:\\project\\dataStructuresAndAlgorithms\\IODemo\\a.txt");
System.out.println(file.getAbsolutePath());
System.out.println(file.getPath());
System.out.println(file.toString());//toString 方法调用的是getPath方法
System.out.println(file.getName());
File file2= new File("F:\\\\project\\\\dataStructuresAndAlgorithms\\\\IODemo\\\\.project");
System.out.println(file.length());
System.out.println(file2.length());
}
判断功能的方法
—exists() 测试此抽象路径名表示的文件或目录是否存在,存在返回true,否则返回false。
—isDirectory() 测试此抽象路径名表示的文件是否为目录。
—isFile() 测试此抽象路径名表示的文件是否为普通文件。
* isDirectory和isFile方法是互斥的,不是目录就是普通文件,对不存在的文件路径,都返回false
—isHidden() 测试此抽象路径名命名的文件是否为隐藏文件。
static void show2Modifier() {
File file= new File("F:\\project\\dataStructuresAndAlgorithms\\IODemo\\a.txt");
File file2= new File(".project");
System.out.println(file.exists());
System.out.println(file2.exists());
System.out.println(file.isDirectory());
System.out.println(file.isFile());
System.out.println(file2.isDirectory());
System.out.println(file2.isFile());
}
创建和删除功能的方法
—createNewFile() 当且仅当具有该名称的文件尚不存在时,原地创建一个由该抽象路径名命名的新的空文件。
* 如果文件不存在,创建文件 ,返回true
* 如果文件存在,不创建文件,返回false
* 该方法只能创建文件不能创建文件夹
* 文件夹目录必须正确,否则会抛出异常
—delete() 删除由此抽象路径名表示的文件或目录。
* 删除构造方法中给出的路径表示的文件夹或文件
* 文件夹删除成功,返回true
* 文件夹有类容,不会删除,返回false,构造方法中路径不存在,返回false
* delete直接在硬盘上删除文件或文件夹,不会进入回收站
—mkdir() 创建由此抽象路径名命名的目录。
* 只能创建单级文件夹
* 文件夹存在,不创建,返回false
* 文件夹不存在,创建,返回true
—mkdirs() 创建由此抽象路径名命名的目录,包括任何必需但不存在的父目录。
* 可以创建单级空文件夹,也可以创建多级文件夹。
static void show3Modifier() throws IOException {
File file = new File("F:\\\\project\\\\dataStructuresAndAlgorithms\\\\IODemo\\\\a.txt");
System.out.println(file.createNewFile());
File file2 = new File("F:\\\\project\\\\dataStructuresAndAlgorithms\\\\IODe\\\\a.txt");//故意将最后一个文件夹路径写错,
System.out.println(file2.createNewFile());
}
File类目录的遍历
— String[] list(FilenameFilter filter) 返回一个字符串数组,命名由此抽象路径名表示的目录中满足指定过滤器的文件和目录。
*list获取给定目录中所有文件/文件夹的名称,把获取到的多个名称存放到String 数组中返回
—File[] listFiles() 返回一个抽象路径名数组,表示由该抽象路径名表示的目录中的文件。
* 遍历给定目录中所有文件/文件夹,将文件/文件夹封装为File对象,存放到File数组中返回
*
* list和listFiles遍历的是构造方法中给出的路径
* 如果构造方法中给出目录路径不存在或者路径不是一个目录, 两个方法都将抛出空指针异常
* 隐蔽文件/文件夹也将被返回
static void show4Modifier() {
File file = new File("F:\\\\project\\\\dataStructuresAndAlgorithms\\\\IODemo");
String[] fileNames = file.list();
File[] files= file.listFiles();
for(String filename: fileNames) {
System.out.println(filename);
}
System.out.println("------------------------------");
for(File resFile:files) {
System.out.println(resFile.toString());
}
}
过滤器的使用
先写出一个用于遍历某个路径下所有文件/文件夹的方法:
//练习,使用递归遍历文件夹中所有类容
private static void getAllFile(File dir) {
File[] files=dir.listFiles();
for(File f: files) {
if(f.isDirectory()) {
getAllFile(f);
}
System.out.println(f);
}
}
—File[] listFiles(FileFilter filter)
*返回一个抽象路径名数组,表示由此抽象路径名表示的满足指定过滤器的目录中的文件和目录
* java.io.FileFilter接口:用于抽象路径名(File对象)的过滤器
* 作用:用于过滤File对象
* 该FileFilter接口中有一个抽象方法:boolean accept(File pathname)测试指定的抽象路径名是否应包含在路径名列表中。
* 参数File pathname是使用listFiles方法遍历路径得到的每一个File对象
—File[] listFiles(FilenameFilter filter)
* 返回一个抽象路径名数组,表示由此抽象路径名表示的满足指定过滤器的目录中的文件和目录。
* java.io.FilenameFilter接口:用于实现此接口的类的实例用于过滤文件名
* 作用:用于过滤文件名称
* boolean accept(File dir, String name) 测试指定文件是否应包含在文件列表中。
* File dir 构造方法中传递的被遍历的目录
* String name 使用listFiles遍历得到的每一个File的名称
FileFilter 文件过滤器的使用
//练习,过滤器FileFilter的使用,使用匿名类
private static void getAllFile3(File dir) {
//使用匿名类部类定义过滤规则
File[] files=dir.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
return pathname.isDirectory()||pathname.getName().toLowerCase().endsWith(".java");
}
});
for(File f: files) {
if(f.isDirectory()) {
getAllFile(f);
}else {
System.out.println(f);
}
}
}
FilenameFilter 文件名过滤器的使用
//练习,过滤器FilenameFilter的使用,使用匿名类
private static void getAllFile4(File dir) {
//使用匿名类部类定义过滤规则
File[] files=dir.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return new File(dir,name).isDirectory()|| name.toLowerCase().endsWith(".java");
}
});
for(File f: files) {
if(f.isDirectory()) {
getAllFile(f);
}else {
System.out.println(f);
}
}
}