java-File类详解

104 阅读4分钟

File详解

什么是File类

在进入IO流,我们应该先知道File类

File是java.io.包下的类,File类的对象,用于代表当前操作系统的文件(可以是文件、或文件夹)。

主要就是获取文件信息(大小、文件名、修改时间)、创建文件或者文件敬爱、删除文件或者文件夹等等

File1.png

注意:File类只能对文件本身进行操作,不能读写文件里面存储的数据。

创建File类对象

在这之前我们也应该知道什么是绝对路径和相对路径:

绝对路径:从盘符开始

File f1=new File("D:\Ajava-code\src\text10.txt");

相对路径:不带盘符,默认直接到当前工程下的目录寻找文件

File f1=new File("\模块名\src\text10.txt");

路径分隔符和系统有关:

  • windowsDOS系统默认使用""来表示
  • UNIX和URL使用"/"来表示

File2.png

//创建一个File对象,自带某个具体的文件
//一般在项目中都是写相对路径
File f1=new File("\Ajava-code\src\text10.txt");
System.out.println(f1.length()); //文件大小

一般都用第一个来创建一个File对象

常用方法1:判断文件类型、获取文件信息

File3.png

//创建一个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:创建文件

File4.png

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:删除文件

File5.png

注意: Java中的删除不走回收站。 要删除一个文件目录,请注意该文件目录内不能包含文件或者文件目录。 就是说delete()方法默认只能删除文件和空文件夹

常用方法4:遍历文件夹

File6.png

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方法时的注意事项:

  1. 当主调是文件,或者路径不存在时,返回null
  2. 当主调是空文件夹时,返回一个长度为O的数组
  3. 当主调是一个有内容的文件夹时,将里面所有一级文件和文件夹的路径放在File数组中返回
  4. 当主调是一个文件夹,且里面有隐藏文件时,将里面所有文件和文件夹的路径放在File数组中返回,包含隐藏文件
  5. 当主调是一个文件夹,但是没有权限访问该文件夹时,返回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); //是一个文件夹,就递归在进入下一级查找、递归算法
                }
            }
        }
    }
}