黑马JAVA+AI 加强08 File-IO流
1.File-IO流
- 将数据存在内存
  
- 将数据存在外存(硬盘)
  
 1.1操作文件和文件夹
- File类比快递盒,可以获取盒子的大小,标签,重量之类的属性等
  
 1.2 IO流
- IO 流(Input/Output Stream)本质上就是内存与外部存储(如硬盘、U 盘、网络等)之间交换数据的 “通道”,负责数据的 “输入”(从外部读入内存)和 “输出”(从内存写入外部)。
  
2.File类
- java.io.File 类是 Java 中用于操作文件和目录路径的工具类,它并不直接读写文件内容,而是用于管理文件 / 目录的元信息(如路径、名称、大小、创建时间等)及目录结构(如创建、删除、判断存在性等)。
- 核心作用
- 封装文件或目录的路径信息(绝对路径 / 相对路径)。
- 提供方法操作文件 / 目录的属性(如判断是否存在、是否为文件 / 目录、获取大小等)。
- 提供方法操作目录结构(如创建文件夹、删除文件 / 目录、列出子文件等)。
  
 代码案例
 
public class FileConstructorDemo {public static void main(String[] args) {// 1. 构造器:public File(String pathname)// 根据完整文件路径创建File对象(可代表文件或文件夹)File file1 = new File("D:\\test\\example.txt");System.out.println("文件1路径:" + file1.getPath());// 2. 构造器:public File(String parent, String child)// 父路径(文件夹) + 子路径(文件/子文件夹)String parentDir = "D:\\test";String childFile = "sub\\demo.txt";File file2 = new File(parentDir, childFile);System.out.println("文件2路径:" + file2.getPath());// 3. 构造器:public File(File parent, String child)// 父路径对应的File对象 + 子路径(文件/子文件夹)File parentFile = new File("D:\\test");File file3 = new File(parentFile, "image\\pic.jpg");System.out.println("文件3路径:" + file3.getPath());// 验证:File对象可代表不存在的路径File nonExistFile = new File("D:\\test\\nonexist\\temp.txt");System.out.println("不存在的路径是否有效:" + nonExistFile.exists()); // 输出false}
}
public class FileDemo {public static void main(String[] args) {// 1. 创建File对象(封装一个路径,路径可存在或不存在)File file = new File("D:/test/demo.txt"); // 绝对路径File dir = new File("data/docs"); // 相对路径(相对于项目根目录)// 2. 基本属性操作System.out.println("文件路径:" + file.getPath()); // 获取构造器传入的路径System.out.println("绝对路径:" + file.getAbsolutePath()); // 获取绝对路径System.out.println("文件名称:" + file.getName()); // 获取文件名(含后缀)System.out.println("父目录:" + file.getParent()); // 获取父目录路径// 3. 判断性方法System.out.println("是否存在:" + file.exists()); // false(假设路径不存在)System.out.println("是否为文件:" + file.isFile()); // falseSystem.out.println("是否为目录:" + dir.isDirectory()); // false// 4. 创建与删除操作try {// 创建文件(若父目录不存在,创建失败)boolean isFileCreated = file.createNewFile(); System.out.println("文件创建成功?" + isFileCreated);// 创建目录(mkdir():只能创建单级目录;mkdirs():可创建多级目录)boolean isDirCreated = dir.mkdirs(); System.out.println("目录创建成功?" + isDirCreated);} catch (IOException e) {e.printStackTrace();}多级目录/ 目标:创建多级目录 "D:/test/aaa/bbb/ccc"// 假设 D:/test 可能存在,也可能不存在,aaa/bbb/ccc 均不存在File multiDir = new File("D:/test/aaa/bbb/ccc");// 使用 mkdirs() 创建所有不存在的目录(包括父目录)boolean isCreated = multiDir.mkdirs();// 5. 列出目录下的内容if (dir.exists() && dir.isDirectory()) {String[] subNames = dir.list(); // 列出子文件/目录的名称File[] subFiles = dir.listFiles(); // 列出子文件/目录的File对象System.out.println("目录下的内容数量:" + (subNames != null ? subNames.length : 0));}使用listFiles方法时的注意事项:1.当主调是文件,或者路径不存在时,返回null2.当主调是空文件夹时,返回一个长度为 0 的数组3.当主调是一个有内容的文件夹时,将里面所有一级文件和文件夹的路径放在File数组中返回4.当主调是一个文件夹,且里面有隐藏文件时,将里面所有文件和文件夹的路径放在File数组中返回,包含隐藏文件5.当主调是一个文件夹,但是没有权限访问该文件夹时,返回null// 6. 删除操作(删除文件或空目录,非空目录需先删除内容)boolean isFileDeleted = file.delete();boolean isDirDeleted = dir.delete();System.out.println("文件删除成功?" + isFileDeleted);System.out.println("目录删除成功?" + isDirDeleted);}
}
2.1小结

3.递归

3.1递归是一种编程思想,指一个函数(或方法)直接或间接调用自身的过程,用于将复杂问题分解为规模更小的同类子问题,直到子问题简单到可以直接解决(即 “递归终止条件”)。
核心要素
- 递归终止条件:明确何时停止递归,避免无限循环(例如 “当 n=1 时返回结果”)。
- 递归调用:将原问题分解为更小的子问题,通过调用自身解决子问题。
- 典型案例:计算阶乘
 阶乘公式:n! = n × (n-1) × (n-2) × … × 1(0! = 1)
public class Factorial {public static int factorial(int n) {// 递归终止条件:n=0或n=1时,直接返回1if (n == 0 || n == 1) {return 1;}// 递归调用:n! = n × (n-1)!return n * factorial(n - 1);}public static void main(String[] args) {System.out.println(factorial(5)); // 输出:120(5×4×3×2×1)}
}
