欢迎光临
我们一直在努力

Java学习23

上午 3h

1. File 类完整学习

1.1 File 核心作用(重点必背)

File 不负责读写文件里面的内容!只负责:

  • 定义文件 / 文件夹路径
  • 创建文件、删除文件
  • 判断是否是文件 / 文件夹
  • 遍历文件夹下所有内容一句话:File 是操作「文件外壳、路径、文件夹」,IO 流才操作「文件里面的内容」

1.2 路径分类详解

  • 绝对路径:从电脑盘符开始完整路径例:D:\\Java\\a.txt
  • 相对路径:相对于当前项目根路径例:a.txt 直接在项目根目录下
  • 1.3 File 构造方法

    java

    运行

    // 1. 传入字符串路径
    File f1 = new File("D:\\\\Java\\\\a.txt");
    // 2. 父路径 + 子路径
    File f2 = new File("D:\\\\Java", "a.txt");

    注意:Java 里路径 \\ 要写 \\\\ 转义,也可以写 /

    1.4 创建功能 详解 + 完整代码

    三个创建方法区别(必考)
  • createNewFile():创建普通文件(文本 / 空文件),只能建文件,不能建文件夹
  • mkdir():创建单级空文件夹,多级会失败
  • mkdirs():创建多级文件夹(推荐日常用)
  • 完整可运行代码

    java

    运行

    import java.io.File;
    import java.io.IOException;

    public class FileCreateDemo {
    public static void main(String[] args) throws IOException {
    // 1. 定义文件路径
    File file = new File("D:\\\\JavaDay17\\\\test.txt");
    // 2. 创建普通文件
    boolean b1 = file.createNewFile();
    System.out.println("文件创建是否成功:" + b1);

    // 3. 单级文件夹
    File dir1 = new File("D:\\\\JavaDay17\\\\文件夹1");
    boolean b2 = dir1.mkdir();
    System.out.println("单级文件夹创建:" + b2);

    // 4. 多级文件夹(大纲重点)
    File dir2 = new File("D:\\\\JavaDay17\\\\a\\\\b\\\\c");
    boolean b3 = dir2.mkdirs();
    System.out.println("多级文件夹创建:" + b3);
    }
    }

    逐行解释

    • new File(路径):只是在内存定义路径,还没真正创建
    • createNewFile():磁盘生成空文件,已存在则返回 false
    • mkdir():只能建一层,多层路径直接失败
    • mkdirs():自动补全所有层级,开发首选

    1.5 删除功能 delete ()

    • 只能删除空文件夹、普通文件
    • 不能删除带内容的文件夹

    java

    运行

    File f = new File("D:\\\\JavaDay17\\\\test.txt");
    System.out.println(f.delete() ? "删除成功" : "删除失败");

    1.6 判断 & 获取方法(必背)

    • exists():是否存在
    • isFile():是否是普通文件
    • isDirectory():是否是文件夹
    • getName():获取名称
    • getAbsolutePath():获取绝对路径

    完整案例:

    java

    运行

    File f = new File("D:\\\\JavaDay17\\\\test.txt");
    System.out.println("是否存在:" + f.exists());
    System.out.println("是否是文件:" + f.isFile());
    System.out.println("是否是文件夹:" + f.isDirectory());
    System.out.println("文件名:" + f.getName());

    1.7 遍历文件夹 list () /listFiles ()

    区别
    • list():返回 String[] 只获取名称
    • listFiles():返回 File[] 获取完整 File 对象(开发常用)

    完整遍历代码:

    java

    运行

    public class FileListDemo {
    public static void main(String[] args) {
    File dir = new File("D:\\\\JavaDay17");
    // 方式1:只拿名字
    String[] names = dir.list();
    for (String name : names) {
    System.out.println("文件名:" + name);
    }

    // 方式2:拿File对象(可继续判断、操作)
    File[] files = dir.listFiles();
    for (File f : files) {
    System.out.println(f.getAbsolutePath());
    }
    }
    }

    ✅ 大纲遗漏补充(重要必学)

  • File 创建 / 删除不能递归删除带内容文件夹,后面要学递归遍历删除
  • 路径分隔符静态常量 File.separator 跨平台通用
  • listFiles () 要做非空判断,防止空指针异常

  • 下午 2.5h

    2. IO 流概述

    2.1 IO 含义

    • I:Input 输入 读(从硬盘读到程序)
    • O:Output 输出 写(从程序写到硬盘)

    2.2 流分类

  • 字节流:万能流,后缀 Stream可以读写:图片、视频、音频、文档、所有文件
  • 字符流:后缀 Reader/Writer只能读写:纯文本文件(txt、java),不能读写图片视频
  • 2.3 流向划分(必背)

    • 输入流:硬盘 → 程序
    • 输出流:程序 → 硬盘

    3. 字节输出流 FileOutputStream

    3.1 作用

    程序 写出数据到硬盘文件

    3.2 覆盖写入 / 追加写入区别

  • 无第二个参数:覆盖原有内容
  • 构造传 true:追加写入,不覆盖
  • 3.3 三种写入方式

  • 写入单个字节
  • 写入整个字节数组
  • 写入字节数组指定范围
  • 完整可运行代码 + 逐行解释

    java

    运行

    import java.io.FileOutputStream;
    import java.io.IOException;

    public class FOSDemo {
    public static void main(String[] args) throws IOException {
    // 1. 创建字节输出流:覆盖模式
    FileOutputStream fos = new FileOutputStream("D:\\\\JavaDay17\\\\write.txt");

    // 写入单个字节
    fos.write(97); // 97对应ASCII a

    // 写入字节数组
    byte[] arr = "Hello Java IO".getBytes();
    fos.write(arr);

    // 关闭流(必做)
    fos.close();
    }
    }

    逐行解释

    • new FileOutputStream(路径):文件不存在则自动创建,存在则清空覆盖
    • write(数字):按 ASCII 写入字节
    • 字符串.getBytes():字符串转字节数组
    • close():释放系统资源,必须写

    追加写入代码

    java

    运行

    // 第二个参数true = 追加不覆盖
    FileOutputStream fos = new FileOutputStream("D:\\\\JavaDay17\\\\write.txt", true);

    4. 字节输入流 FileInputStream

    4.1 作用

    把硬盘文件内容 读取到程序中

    4.2 三种读取方式

  • 一次读 1 个字节
  • 一次读一个字节数组
  • 循环读取全部内容
  • 完整读取代码

    java

    运行

    import java.io.FileInputStream;
    import java.io.IOException;

    public class FISDemo {
    public static void main(String[] args) throws IOException {
    FileInputStream fis = new FileInputStream("D:\\\\JavaDay17\\\\write.txt");

    // 一次读1个字节
    int b;
    while ((b = fis.read()) != -1) {
    System.out.print((char) b);
    }

    fis.close();
    }
    }

    核心:读到末尾返回 -1,用循环读完所有内容

    数组高效读取(开发常用)

    java

    运行

    byte[] buf = new byte[1024];
    int len;
    while ((len = fis.read(buf)) != -1) {
    System.out.print(new String(buf, 0, len));
    }

    ✅ 大纲遗漏补充

  • IO 流必须处理异常 throws IOException
  • 用完流必须 close (),否则占用系统资源
  • 字节流读取中文可能乱码(字符流解决)

  • 晚上 1.5h

    5. 综合实操

    5.1 实操 1:File 遍历本地文件夹

    复用前面 listFiles() 代码,可遍历指定目录所有文件

    5.2 实操 2:字节流实现文件复制(图片 / 文档通用)

    原理:一边读、一边写FileInputStream 读 → FileOutputStream 写

    完整可运行复制代码(重点必背)

    java

    运行

    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;

    public class FileCopyDemo {
    public static void main(String[] args) throws IOException {
    // 源文件(要复制的)
    FileInputStream fis = new FileInputStream("D:\\\\JavaDay17\\\\1.jpg");
    // 目标文件(复制到这里)
    FileOutputStream fos = new FileOutputStream("D:\\\\JavaDay17\\\\copy.jpg");

    // 字节数组缓冲
    byte[] buf = new byte[1024];
    int len;
    // 循环读取、循环写入
    while ((len = fis.read(buf)) != -1) {
    fos.write(buf, 0, len);
    }

    // 关闭资源 先开后关
    fos.close();
    fis.close();
    System.out.println("文件复制完成");
    }
    }

    逐行解释

  • 输入流绑定原图片,输出流绑定新图片
  • 1024 字节数组做缓冲区,高效读写
  • 读到多少字节,就写入多少字节
  • 最后先关输出流、再关输入流
  • ✅ 大纲遗漏补充(极重要)

  • 资源释放标准写法:try-catch-finally 保证一定关闭流
  • 文件复制只能用字节流,图片视频不能用字符流
  • 路径不存在时输入流会直接报错,要提前用 File 判断存在

  • Day23 过关标准(升级完整版)

  • 能分清 File 只操作路径、IO 流操作内容
  • 熟练手写 createNewFile /mkdir/mkdirs /delete 及判断方法
  • 会用 listFiles () 遍历文件夹,会做非空判断
  • 能区分字节流、字符流适用场景
  • 熟练手写 FileOutputStream 覆盖 / 追加、单字节 / 数组写入
  • 熟练手写 FileInputStream 循环读取
  • 独立写出 字节流文件复制 代码
  • 牢记流必须 close () 关闭资源

  • 额外整体补充(你大纲完全没提,但必考)

  • 相对路径默认指向项目根目录
  • File 不能删除非空文件夹,后续需递归实现
  • IO 流异常处理两种方式:throws 抛出、try-finally 捕获
  • 字节流读中文乱码根源,为后天字符流做铺垫
  • 缓冲区数组长度固定 1024 倍数,行业规范
  • 下面这个版本观看更方便

    最终稳定版(复制直接用,永远结果一致)

    java

    运行

    import java.io.File;
    import java.io.IOException;

    public class FileCreateDemo {
    public static void main(String[] args) throws IOException {

    // ==============================================
    // 固定第一步:先把父文件夹建好(万能、永远成功)
    // ==============================================
    File parentDir = new File("D:\\\\JavaDay17");
    parentDir.mkdirs();

    // ==============================================
    // 1. 创建文件(只判断,不看true/false,避免混乱)
    // ==============================================
    File file = new File(parentDir, "test.txt");
    if (!file.exists()) { // 不存在才创建
    file.createNewFile();
    }

    // ==============================================
    // 2. 创建单级文件夹
    // ==============================================
    File dir1 = new File(parentDir, "文件夹1");
    if (!dir1.exists()) { // 不存在才创建
    dir1.mkdir();
    }

    // ==============================================
    // 3. 创建多级文件夹
    // ==============================================
    File dir2 = new File(parentDir, "a\\\\b\\\\c");
    dir2.mkdirs(); // 永远稳

    // ==============================================
    // 最后统一打印结果(永远一样)
    // ==============================================
    System.out.println("文件是否存在:" + file.exists());
    System.out.println("文件夹1是否存在:" + dir1.exists());
    System.out.println("a/b/c 是否存在:" + dir2.exists());
    }
    }

    必背的核心区别(记死)

    表格

    流类型作用文件不存在时的行为
    FileOutputStream 写文件 自动创建文件
    FileInputStream 读文件 抛出 FileNotFoundException,程序崩溃
    赞(0)
    未经允许不得转载:171主机测评 » Java学习23
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址