File (不是访问文件数据的)
- 每一个实例可以表示硬盘(文件系统)中的一个文件或目录(实际上表示的是一个抽象路径)
- 主要是JAVA为文件这块的操作(如创建、删除、新增等)而设计的相关类
- 包名是java.io,其实现了Serializable, Comparable两大接口以便于其对象可序列化和比较。
// File file = new File("c:/xxx/xxx/xx/xxx.txt"); //-----绝对路径不推荐使用
名词解释
1)相对路径 顾名思义,相对路径就是相对于当前文件的路径。开发中一般表示路径使用这个方法。
2)绝对路径 绝对路径就是你的电脑上的文件或目录在硬盘上真正的路径。
//使用File访问当前项目目录下的demo.txt文件
File file = new File("./demo.txt");
//获取文件名字
String name = file.getName();
System.out.println(name);
//获取文件大小(单位是字节)
long len = file.length();
System.out.println(len+"字节");
//是否可读可写
boolean cr = file.canRead();
boolean cw = file.canWrite();
System.out.println("是否可读:"+cr);
System.out.println("是否可写:"+cw);
//是否隐藏文件
boolean ih = file.isHidden();
System.out.println("是否隐藏:"+ih);
- createNewFile()方法 创建新文件
//在当前目录下新建一个文件:test.txt
File file = new File("./test.txt");
//boolean exists()判断当前File表示的位置是否已经实际存在该文件或目录
if(file.exists()){
System.out.println("该文件已存在!");
}else{
file.createNewFile();//将File表示的文件创建出来
System.out.println("文件已创建!");
}
- delete()方法 文件删除
File file = new File("test.txt");//同属于一个文件夹,可以不写 "./"
if(file.exists()){
file.delete(); //删除文件
System.out.println("文件已删除!");
}else{
System.out.println("文件不存在!");
}
- mkDir()、mkDirs(): 创建目录
//在当前目录下新建一个目录:demo
// File dir = new File("demo");
File dir = new File("./a/b/c/d/e/f");
if(dir.exists()){
System.out.println("该目录已存在!");
}else{
//dir.mkdir();//创建目录时要求所在的目录必须存在 ,所以一般不用
dir.mkdirs();//创建目录时会将路径上所有不存在的目录一同创建
System.out.println("目录已创建!");
}
- delete() 删除一个目录,但是只能删除空目录
//将当前目录下的demo目录删除
File dir = new File("demo");
// File dir = new File("a");
if(dir.exists()){
dir.delete();//delete方法删除目录时只能删除空目录
System.out.println("目录已删除!");
}else{
System.out.println("目录不存在!");
}
- listFiles方法 可以访问一个目录中的所有子项
//获取当前目录中的所有子项
File dir = new File(".");
/*
boolean isFile()
判断当前File表示的是否为一个文件
boolean isDirectory()
判断当前File表示的是否为一个目录
*/
if(dir.isDirectory()){
/*
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());
}
}
- 重载的 listFiles方法: 有参的
//该方法要求传入一个文件过滤器,并仅将满足该过滤器要求的子项返回。
File dir = new File(".");
if(dir.isDirectory()){
File[] subs = dir.listFiles(new FileFilter(){
public boolean accept(File file) {
return file.getName().startsWith(".");
}
});
System.out.println(subs.length);
Lambda表达式:
- JDK8之后,java支持了lambda表达式这个特性.
- 可以用更精简的代码创建匿名内部类.但是该匿名内部类实现的接口只能有一个抽象方法,否则无法使用!
- 是编译器认可的,最终会将其改为内部类编译到class文件中
Lambda特征:
- 可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。
- 可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。
- 可选的大括号:如果主体包含了一个语句,就不需要使用大括号。
- 可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定表达式返回了一个数值。
// 语法
(参数列表) ->{
方法体
}
//匿名内部类形式创建FileFilter ---- ①
FileFilter filter = new FileFilter() {
public boolean accept(File file) {
return file.getName().startsWith(".");
}
};
//lambda 写法 写① 的匿名内部类创建 FileFilter ---- ②
FileFilter filter2 = (File file)->{
return file.getName().startsWith(".");
};
//lambda表达式中参数的类型可以忽略不写 lambda 再次简化②的版本----③
FileFilter filter3 = (file)->{
return file.getName().startsWith(".");
};
/*
lambda表达式方法体中若只有一句代码,则{}可以省略
如果这句话有return关键字,那么return也要一并省略! ------基于③ 再次简化的写法版本
*/
FileFilter filter4 = (file)->file.getName().startsWith(".");
学习记录,如有侵权请联系删除。