Java流控制文件

字节流 和 字符流

字节流(Byte Stream)

单位:字节(8 bit)
适用情况:不关心字符编码
适合:
--->>图片、音频、视频、压缩包、二进制文件

点我看看代码
import java.io.*;

public class Main {
    public static void main(String[] args) throws Exception {
        FileInputStream fis = new FileInputStream("test.txt");
//构造重载自动找路径,不需要File f = new File(路径)
        int b;
        while ((b = fis.read()) != -1) {
            System.out.print((char) b);
        }
        fis.close();
    }
}

read() 一次读 1 个字节
返回 -1 表示读完
中文可能乱码(因为没处理编码)
构造重载自动找路径,不需要File f = new File(路径)

字符流(Character Stream)

单位:字符(char,16 bit)
会自动处理 编码(UTF-8)
适合:
--->>文本文件(.txt / .java / .md)

点我看看代码示例
import java.io.*;

public class Main {
    public static void main(String[] args) throws Exception {
        FileReader fr = new FileReader("test.txt");

        int c;
        while ((c = fr.read()) != -1) {
            System.out.print((char) c);
        }
        fr.close();
    }
}

操作过程

  1. 创建流对象
  2. 读 / 写数据
  3. 处理数据
    4. 关闭流
    不会自动把堆上这个对象关掉

可以用try-with-resources

try (FileInputStream fis = new FileInputStream("a.txt")) {
    //使用,关闭
}

以后真正要用的是BufferedReader这里随便贴一段代码吧

点击查看代码
import java.io.*;

public class Main {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new FileReader("test.txt"));

        String line;
        while ((line = br.readLine()) != null) {
            System.out.println(line);
        }

        br.close();
    }
}
//写文件
import java.io.*;

public class Main {
    public static void main(String[] args) throws Exception {
        BufferedWriter bw = new BufferedWriter(new FileWriter("out.txt"));

        bw.write("Hello Java");
        bw.newLine();
        bw.write("字符流写入");
        bw.close();
    }
}

点我看看想法 **和Callable的关系**

就像FutureTask 来接受Callable实例?

哦我调查了一下,应该不太一样
BufferedReader:装饰器模式

public class BufferedReader extends Reader {
    protected Reader in;
}

它本身还是一个 Reader
只是 内部持有另一个 Reader

FutureTask:任务适配 + 状态机
FutureTask 的关系是:
Callable → 提供计算逻辑
FutureTask → 管理执行、状态、结果

FutureTask<V> implements RunnableFuture<V>

BufferedReader 是“能力增强型包装”,
FutureTask 是“执行语义转换型包装”

管道流之类的其实也学了,也有笔记,忘了,下次再翻着笔记写写吧

手记

点击查看笔记图片 ~~传两张得了~~

image
image

posted @ 2025-12-13 11:44  气温骤降  阅读(20)  评论(0)    收藏  举报