企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
[TOC] # 概述 当需要把内存中的数据存储到持久化设备上这个动作称为输出(写)Output操作。 当把持久设备上的数据读取到内存中的这个动作称为输入(读)Input操作。 因此我们把这种输入和输出动作称为IO操作 # File类 File文件和目录路径名的抽象表示形式。即,Java中把文件或者目录(文件夹)都封装成File对象。也就是说如果我们要去操作硬盘上的文件,或者文件夹只要找到File这个类即可 ## 构造函数 ![](https://box.kancloud.cn/f7adaa605e99de8d7819e8aacf41fedf_1618x338.jpg) 演示: ~~~ //File构造函数演示 String pathName = "e:\\java_code\\day22e\\hello.java"; File f1 = new File(pathName);//将Test22文件封装成File对象。注意;有可以封装不存在文件或者文件夹,变成对象。 System.out.println(f1); File f2 = new File("e:\\java_code\\day22e","hello.java"); System.out.println(f2); //将parent封装成file对象。 File dir = new File("e:\\java_code\\day22e"); File f3 = new File(dir,"hello.java"); System.out.println(f3); ~~~ ## File类的获取 创建完了File对象之后,那么File类中都有如下常用方法,可以获取文件相关信息 ![](https://box.kancloud.cn/dfa711c096ff90dc1856d57b9837c8f1_1296x498.jpg) ~~~ //创建文件对象 File file = new File("Test22.java"); //获取文件的绝对路径,即全路径 String absPath = file.getAbsolutePath(); //File中封装的路径是什么获取到的就是什么。 String path = file.getPath(); //获取文件名称 String filename = file.getName(); //获取文件大小 long size = file.length(); ~~~ ## 文件和文件夹的创建删除等 ![](https://box.kancloud.cn/65c0d86dc47f3e0ca4bf6df146b4e3f5_1666x594.jpg) ~~~ // 对文件或者文件加进行操作。 File file = new File("e:\\file.txt"); // 创建文件,如果文件不存在,创建 true 如果文件存在,则不创建 false。 如果路径错误,IOException。 boolean b1 = file.createNewFile(); System.out.println("b1=" + b1); //-----------删除文件操作-------注意:不去回收站。慎用------ boolean b2 = file.delete(); System.out.println("b2="+b2); //-----------需要判断文件是否存在------------ boolean b3 = file.exists(); System.out.println("b3="+b3); //-----------对目录操作 创建,删除,判断------------ File dir = new File("e:\\abc"); //mkdir()创建单个目录。//dir.mkdirs();创建多级目录 boolean b4 = dir.mkdir(); System.out.println("b4="+b4); //删除目录时,如果目录中有内容,无法直接删除。 boolean b5 = dir.delete(); //只有将目录中的内容都删除后,保证该目录为空。这时这个目录才可以删除。 System.out.println("b5=" + b5); //-----------判断文件,目录------------ File f = new File("e:\\javahaha");// 要判断是否是文件还是目录,必须先判断存在。 // f.mkdir();//f.createNewFile(); System.out.println(f.isFile()); System.out.println(f.isDirectory()); ~~~ ## listFiles()方法 ![](https://box.kancloud.cn/0ce8c8b4d35dc3c6eba122cdf5d0640c_1616x208.jpg) ~~~ File dir = new File("e:\\java_code"); //获取的是目录下的当前的文件以及文件夹的名称。 String[] names = dir.list(); for(String name : names){ System.out.println(name); } //获取目录下当前文件以及文件对象,只要拿到了文件对象,那么就可以获取其中想要的信息 File[] files = dir.listFiles(); for(File file : files){ System.out.println(file); } ~~~ 注意:在获取指定目录下的文件或者文件夹时必须满足下面两个条件 1,指定的目录必须是存在的, 2,指定的必须是目录。否则容易引发返回数组为null,出现NullPointerException ## 文件过滤器 File类中重载的listFiles方法,并且接受指定的过滤器 ![](https://box.kancloud.cn/10d64c520bfb604f8e0cb567773b8078_1594x94.jpg) ![](https://box.kancloud.cn/09fccd76745daf96f0cb0a62514f62e2_1490x306.jpg) * 测试类 ~~~ public class FileDemo2 { public static void main(String[] args) { //获取扩展名为.java所有文件 //创建File对象 File file = new File("E:\\code\\day11_code"); //获取指定扩展名的文件,由于要对所有文件进行扩展名筛选,因此调用方法需要传递过滤器 File[] files = file.listFiles(new MyFileFilter()); //遍历获取到的所有符合条件的文件 for (File f : files) { System.out.println(f); } } } ~~~ * 自定类继承FilenameFilter过滤器接口 ~~~ //定义类实现文件名称FilenameFilter过滤器 class MyFileFilter implements FilenameFilter{ public boolean accept(File dir, String name) { return name.endsWith(".java"); } } ~~~ 在listFiles(FileFilter filter) 也可以接受一个FileFilter过滤器,它和我们讲的FilenameFilter有啥区别呢? ![](https://box.kancloud.cn/20d0664f23b6f8c7a7c6fa7898708603_1654x434.jpg) FilenameFilter过滤器中的accept方法接受两个参数,一个当前文件或文件夹所在的路径,一个是当前文件或文件夹对象的名称。 FileFilter 过滤器中的accept方法接受一个参数,这个参数就当前文件或文件夹对象 **当我们需要过滤文件名称时就可以使用FilenameFilter这个过滤器,当我们想对当前文件或文件夹进行过滤,就可以使用FileFilter ,比如需要当前目录下的所有文件夹,就可以使用FileFilter 过滤器**。 * 测试类 ~~~ public class FileDemo2 { public static void main(String[] args) { //获取扩展名为.java所有文件 //创建File对象 File file = new File("E:\\code\\day11_code"); //获取指定目录下的文件夹 File[] files = file.listFiles(new FileFileterByDir()); //遍历获取到的所有符合条件的文件 for (File f : files) { System.out.println(f); } } } ~~~ * 自定义类继承FileFilter过滤器接口 ~~~ //文件过滤器 class FileFileterByDir implements FileFilter{ public boolean accept(File pathname) { return pathname.isDirectory(); } } ~~~