1.File类:
File类的每一个实例可以表示硬盘(文件系统中)的一个文件或目录,实际上表示的是一个抽象路径。
使用File创建一个文件:File file = new File("./test.txt");//这里传递的是文件路径 ./是指当前目录 file.createNewFile();//将File文件创建出来 file.exists();//判断file是否存在
1.1File的作用:
<1.访问其表示的文件或目录的属性信息(名字,大小,时间等)。
<2.操作文件或目录
<3.访问一个目录中的所有子项
##File不能访问文件数据!
1.2File提供的常用方法:
- String getName()返回当前文件或目录的名字
- long length()返回当前文件的大小,单位是字节
- boolean canRead()返回一个boolean值表示文件是否可读
- boolean canWrite()返回一个boolean值表示文件是否可写
- boolean isHidden()返回一个boolean值表示文件是否隐藏
- boolean exists()判断目录是否存在
- boolean delete()删除一个文件/目录
- boolean createNewFile()创建一个File文件
- boolean mkDir()创建当前File表示的目录;
- boolean mkDirs()创建当前File表示的目录,同时将所有不存在的父目录一同创建
- boolean isFile()判断当前File对象表示的是否为一个文件
- boolean isDirectory()判断当前File对象表示的是否为一个目录
- File[ ] listFiles()获取当前File对象表示的目录中的所有子项,返回数组中每一个元素(File对象)
File file = new File("./demo.txt");
System.out.println("名字:"+file.getName());
System.out.println("字节:"+file.length());
System.out.println("是否可读"+file.canRead());
System.out.println("是否可写"+file.canWrite());
System.out.println("是否隐藏"+file.isHidden());
1.3文件过滤器
File重写的:File[] listFiles(FileFilter filter) 该方法会返回当前File对象表示的目录中所有满足给定的过滤器要求的子项。 listFiles方法内部会将这个目录中每一个子项所对应的File对象逐一传给过滤器filter的 accept方法,并最终将accept方法返回为true的所有子项返回。
File dir = new File(".");
if(dir.isDirectory()){
FileFilter filter = new FileFilter(){//匿名内部类创建过滤器
public boolean accept(File file) {
String name = file.getName();
boolean starts = name.startsWith(".");//名字是否以"."开始
System.out.println("过滤器过滤:"+name+",是否符合要求:"+starts);
return starts;
}
};
File[] subs = dir.listFiles(filter);//使用过滤器
1.3.1可以使用Lambda表达式用更精简的语法创建匿名内部类
语法:
(参数列表)->{ 方法体 }
应用:当我们使用匿名内部类创建一个对象时,如果实现的接口中抽象方法时,该操作就可以使用lambda表达式做替换,使代码更简洁。
//匿名内部类写法创建一个文件过滤器
FileFilter filter1 = new FileFileter(){
public boolean accept(File f){
return f.length()>500;
}
};
//lambda表达式写法:去掉接口和方法名部分,在参数列表和方法体大括号之间加上"->"就是lambda
FileFilter filter2 = (File f)->{
return f.length()>500;
};
//忽略方法参数类型
FileFilter filter3 = (f)->{
return f.length()>500;
};
//如果方法的参数只有一个,参数列表的()可以忽略不写
FileFilter filter4 = f->{
return f.length()>500;
};
//如果方法体中只有一句代码,那么方法体的{}可以忽略不写
//如果有return关键字,那么在忽略{}的同时return关键字也必须一同忽略
FileFilter filter5 = f->f.length()>500;