File详解
什么是File类
在进入IO流,我们应该先知道File类
File是java.io.包下的类,File类的对象,用于代表当前操作系统的文件(可以是文件、或文件夹)。
主要就是获取文件信息(大小、文件名、修改时间)、创建文件或者文件敬爱、删除文件或者文件夹等等
注意:File类只能对文件本身进行操作,不能读写文件里面存储的数据。
创建File类对象
在这之前我们也应该知道什么是绝对路径和相对路径:
绝对路径:从盘符开始
File f1=new File("D:\Ajava-code\src\text10.txt");
相对路径:不带盘符,默认直接到当前工程下的目录寻找文件
File f1=new File("\模块名\src\text10.txt");
路径分隔符和系统有关:
windows和DOS系统默认使用""来表示- UNIX和URL使用
"/"来表示
//创建一个File对象,自带某个具体的文件
//一般在项目中都是写相对路径
File f1=new File("\Ajava-code\src\text10.txt");
System.out.println(f1.length()); //文件大小
一般都用第一个来创建一个File对象
常用方法1:判断文件类型、获取文件信息
//创建一个File对象,自带某个具体的文件
//一般在项目中都是写相对路径
File f1=new File("\Ajava-code\src\text10.txt");
System.out.println(f1.length()); //文件大小 89
//对应的文件路径的文件是否存在
System.out.println(f1.exists());//true
//判断当前文件对象是不是一个文件
System.out.println(f1.isFile());//true
//判断当前文件对象是不是一个文件夹
System.out.println(f1.isDirectory());//false
//获取文件的名称包含文件后缀
System.out.println(f1.getName());//text10.txt
//获取文件最后的修改时间
System.out.println(f1.lastModified());//1694877250695 获取的是毫秒值
//获取创建文件对象时的路径
System.out.println(f1.getPath()); //\Ajava-code\src\text10.txt
//获取文件对象的绝对路径
System.out.println(f1.getAbsolutePath()); //D:\Ajava-code\src\text10.txt
这些都是文件对象的基本信息的操作,可以熟练掌握其用法
常用方法2:创建文件
public class demo3 {
public static void main(String[] args) throws IOException {
File f1=new File("D:\新建文件夹 (2)\你好\a\b\c");
//创建一个新的空的文件
// f1.createNewFile(); //根据路径创建一个新的空的文件
// f1.mkdir(); //根据文件对象路径创建一个空的文件夹
f1.mkdirs(); //根据文件对象路径创建一个多级文件夹
}
}
注意:多级文件夹就是文件夹里面还是文件夹
常用方法3:删除文件
注意: Java中的删除不走回收站。 要删除一个文件目录,请注意该文件目录内不能包含文件或者文件目录。 就是说delete()方法默认只能删除文件和空文件夹
常用方法4:遍历文件夹
public class demo4 {
public static void main(String[] args) {
File f1=new File("D:\新建文件夹 (2)");
//获取当前目录下所有的“一级文件对象”到一个文件对象数组中去返回
File[] files=f1.listFiles();
for (File f:files){
System.out.println(f.getAbsolutePath());
}
System.out.println("=====================");
//获取当前目录下所有的“一级文件名称”到一个字符串数组中返回
String [] str=f1.list();
for (String name:str){
System.out.println(name);
}
}
}
运行结果:
//D:\新建文件夹 (2)\hh
//D:\新建文件夹 (2)\hh - 副本
//D:\新建文件夹 (2)\hh - 副本 (2)
//D:\新建文件夹 (2)\hh - 副本 (3)
//D:\新建文件夹 (2)\hh - 副本 (4)
//D:\新建文件夹 (2)\text.txtD:\新建文件夹 (2)\你好hh
//hh - 副本
//hh - 副本 (2)
//hh - 副本 (3)
//hh - 副本 (4)
//text.txt
//你好
使用listFiles方法时的注意事项:
- 当主调是文件,或者路径不存在时,返回null
- 当主调是空文件夹时,返回一个长度为O的数组
- 当主调是一个有内容的文件夹时,将里面所有一级文件和文件夹的路径放在File数组中返回
- 当主调是一个文件夹,且里面有隐藏文件时,将里面所有文件和文件夹的路径放在File数组中返回,包含隐藏文件
- 当主调是一个文件夹,但是没有权限访问该文件夹时,返回null
File的应用-文件搜索
主要就是通过获取给定的文件对象的路径,通过一层一层的搜索目标文件,用到了算法知识就是递归算法(就是一个方法,自己调用自己)
public class demo1 {
public static void main(String[] args) {
//文件搜索
searchFile(new File("D:/"),"javaDoc.md");
}
public static void searchFile(File dir,String fileName){
//1.拦截非法的情况
if(dir.isFile()||!dir.exists()||dir==null){
return; //非法操作,无法搜索
}
// 正常文件夹了,获取文件路径
File[] file=dir.listFiles();
//判断当前获取到的文件是否可以拿到
if(file!=null && file.length>0){
//遍历全部一级文件对象
for(File f:file){
//如果是文件判断是不是我们要找的
if(f.isFile()){
if(f.getName().contains(fileName)){
// 找到了是返回绝对路径,不要打印 f
System.out.println("找到文件了"+f.getAbsolutePath());
}
} else{
searchFile(f,fileName); //是一个文件夹,就递归在进入下一级查找、递归算法
}
}
}
}
}