* java.io.File
* File可以表示硬盘上的一个文件或目录(本质保存的是一个抽象路径)
* File可以:
* 1:访问其表示的文件或目录的属性
* 2:创建删除文件或空目录
* 3:访问一个目录中的子项
* File不可以:访问文件数据
file方法:
1//是否可写 boolean cw = file.canWrite();
2//是否可读 boolean cr = file.canRead();
3//创建一个file
//在当前项目目录下新建一个文件:test.txt
//1创建一个File表示要创建的文件
File file = new File("./test.txt");
//2判断该位置下是否已经存在了这个文件或目录
/*
boolean exists()
判断当前File表示的文件或目录是否真实存在,存在则返回true
*/
if(file.exists()){
System.out.println("该文件已存在");
}else{
//3将该文件创建出来
/*
createNewFile方法的作用是将当前File表示的文件在该位置创建出来
*/
file.createNewFile();//光标在这句代码中按alt+回车
System.out.println("文件已创建");
}
4//删除文件
//删除当前目录下的test.txt文件
//1创建一个File表示要删除的为文件
//注:在相对路径中,"./"可以忽略不写,默认就是从"./"开始
File file = new File("test.txt");
if(file.exists()){
/*
delete()作用就是将当前File表示的文件删除
*/
file.delete();
System.out.println("该文件已删除!");
}else{
System.out.println("该文件不存在!");
}
5//创建一个目录
//在当前目录下新建一个目录:demo
// File dir = new File("./demo");
// File dir = new File("demo");
File dir = new File("./a/b/c/d/e/f");
if(dir.exists()){
System.out.println("该目录已存在!");
}else{
/*
mkdir()创建当前File表示的目录,前提是该目录所在的目录必须存在。
mkdirs()创建当前File表示的目录,并会将所有不存在父目录一同创建出来。
实际开发中推荐使用mkdirs这个方法。
*/
// dir.mkdir();
dir.mkdirs();
System.out.println("该目录已创建!");
}
6//删除目录
//删除当前目录下的demo目录
File dir = new File("./demo");
File dir = new File("./a");
if(dir.exists()){
/*
delete()方法在删除目录是要求该目录必须是一个空目录
*/
dir.delete();
System.out.println("该目录已删除!");
}else {
System.out.println("该目录不存在!");
}
7//获取一个目录中的所有子项
File dir = new File(".");
/*
boolean isFile()
判断当前File对象表示的是否为一个文件
boolean isDirectory()
判断当前File对象表示的是否为一个目录
*/
if(dir.isDirectory()){//判断当前dir表示的是否为一个目录
/*
File[] listFiles()
将当前File对象表示的目录中所有子项返回
*/
File[] subs = dir.listFiles();
System.out.println("当前目录下共:"+subs.length+"个子项");
for(int i=0;i<subs.length;i++){
File sub = subs[i];
System.out.println(sub.getName());
}
}
8// * 重载的listFiles方法
* File[] listFiles(FileFilter filter)
* 该方法允许我们传入一个文件过滤器,然后将当前File对象表示的目录中所有满足此过滤器要求的
* 子项返回。
/*
获取./src/file目录中所有名字中含有“t”的文件
*/
File dir = new File("./src/file");
if(dir.isDirectory()){
//使用匿名内部类创建一个文件过滤器
FileFilter filter = new FileFilter() {
/*
重写accept方法(accept:接受)
此方法的重写原则是定义过滤器过滤File的条件。当参数file符合此过滤器
的过滤条件时,方法应当返回为true。表达过滤器接受该file。
*/
public boolean accept(File file) {
String name = file.getName();
// return name.indexOf("t")>=0;
return name.contains("t");//contains:包含
}
};
File[] subs = dir.listFiles(filter);
for(int i=0;i<subs.length;i++){
System.out.println(subs[i].getName());
}
}
9//lambda表达式/**
* JDK8之后推出的lambda表达式
* lambda表达式可以"面向函数式编程"
* lambda表达式给我们的直观感受是可以用更简洁的语法创建匿名内部类
* 当要实现的接口中【只有一个抽象方法】时,才可以使用lambda表达式去替换原始的匿名内部类形式
* 创建
*
* 基本语法:
* (参数列表)->{
* 方法体
* }
如下可忽略:
//参数类型可以忽略不写
//如果方法体中只有一句代码时,方法体的”{}“可以忽略不写
//如果这句代码含有return关键字,那么在忽略"{}"的同时也要一同忽略return
//如果参数列表中只有一个参数时,"()"可以忽略不写
*
*/ //该过滤器的过滤条件是名字含有"t"的则接受
// FileFilter filter = new FileFilter() {
// public boolean accept(File file) {
// String name = file.getName();//获取要过滤的子项的名字
// boolean c = name.contains("t");//判断名字是否含有字母t
// return c;//含有t的则接受(返回true)
// }
// };
/* FileFilter filter = new FileFilter() {
public boolean accept(File file) {
return file.getName().contains("t");
}
};
FileFilter filter1 = (File file) -> {
return file.getName().contains("t");
};
//参数类型可以忽略不写
FileFilter filter2 = (file) -> {
return file.getName().contains("t");
};
//如果方法体中只有一句代码时,方法体的”{}“可以忽略不写
//如果这句代码含有return关键字,那么在忽略"{}"的同时也要一同忽略return
FileFilter filter3 = (file) -> file.getName().contains("t");
//如果参数列表中只有一个参数时,"()"可以忽略不写
FileFilter filter4 = f -> f.getName().contains("t");*/
File dir = new File("./src/file");
/*
File[] subs = dir.listFiles(new FileFilter() {
public boolean accept(File file) {
return file.getName().contains("t");
}
});
*/
File[] subs = dir.listFiles(f->f.getName().contains("t"));