跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像AI 生图工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Javajava

Java IO流:从字节流到字符流

介绍了Java IO流的基本概念,详细讲解了字节流和字符流的使用方法,并通过示例演示了文件读写操作。涵盖了缓冲流、转换流及对象流的应用,最后展示了如何使用File类进行基本的文件操作。

CodeArtist发布于 2026/2/18更新于 2026/7/2040 浏览
Java IO流:从字节流到字符流

Java IO流:从字节流到字符流

IO流概述

学习目标与重点提示

  • 理解IO流的基本概念
  • 掌握字节流和字符流的使用方法
  • 了解缓冲流、转换流、对象流等高级流的应用场景
  • 掌握文件操作的方法

重点:

  • 字节流(FileInputStream、FileOutputStream)
  • 字符流(FileReader、FileWriter)
  • 缓冲流(BufferedInputStream、BufferedOutputStream、BufferedReader、BufferedWriter)

IO流的基本概念

IO流:用于处理输入和输出操作的流,分为字节流和字符流。

  • 字节流:以字节为单位读取和写入数据的流,适用于处理二进制文件,如图片、音频、视频等。
  • 字符流:以字符为单位读取和写入数据的流,适用于处理文本文件,如.txt、.java等。

IO流的分类:

  • 输入流:从数据源读取数据的流。
  • 输出流:向数据目的地写入数据的流。
  • 节点流:直接与数据源或数据目的地连接的流,如FileInputStream、FileOutputStream、FileReader、FileWriter等。
  • 处理流:对节点流进行包装的流,如缓冲流、转换流、对象流等。

字节流

字节流分为输入字节流和输出字节流。

输入字节流

输入字节流的基类是InputStream,常用的实现类包括FileInputStream、ByteArrayInputStream等。

FileInputStream

定义:FileInputStream是用于读取文件内容的输入字节流。

创建对象:

FileInputStream fis = new FileInputStream("文件路径");

示例:

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

public class TestFileInputStream {
        {
         (    ()) {
             data;
             ((data = fis.read()) != -) {
                System.out.print(() data);
            }
        }  (IOException e) {
            e.printStackTrace();
        }
    }
}
public
static
void
main
(String[] args)
try
FileInputStream
fis
=
new
FileInputStream
"test.txt"
int
while
1
char
catch

输出结果:如果test.txt文件的内容是'Hello, Java!',则输出'Hello, Java!'。

输出字节流

输出字节流的基类是OutputStream,常用的实现类包括FileOutputStream、ByteArrayOutputStream等。

FileOutputStream

定义:FileOutputStream是用于写入文件内容的输出字节流。

创建对象:

FileOutputStream fos = new FileOutputStream("文件路径");

示例:

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

public class TestFileOutputStream {
    public static void main(String[] args) {
        try (FileOutputStream fos = new FileOutputStream("test.txt")) {
            String str = "Hello, Java!";
            fos.write(str.getBytes());
            System.out.println("文件写入成功!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

输出结果:输出'文件写入成功!',并在test.txt文件中写入'Hello, Java!'。

字符流

字符流分为输入字符流和输出字符流。

输入字符流

输入字符流的基类是Reader,常用的实现类包括FileReader、CharArrayReader等。

FileReader

定义:FileReader是用于读取文本文件内容的输入字符流。

创建对象:

FileReader fr = new FileReader("文件路径");

示例:

import java.io.FileReader;
import java.io.IOException;

public class TestFileReader {
    public static void main(String[] args) {
        try (FileReader fr = new FileReader("test.txt")) {
            int data;
            while ((data = fr.read()) != -1) {
                System.out.print((char) data);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

输出结果:如果test.txt文件的内容是'Hello, Java!',则输出'Hello, Java!'。

输出字符流

输出字符流的基类是Writer,常用的实现类包括FileWriter、CharArrayWriter等。

FileWriter

定义:FileWriter是用于写入文本文件内容的输出字符流。

创建对象:

FileWriter fw = new FileWriter("文件路径");

示例:

import java.io.FileWriter;
import java.io.IOException;

public class TestFileWriter {
    public static void main(String[] args) {
        try (FileWriter fw = new FileWriter("test.txt")) {
            String str = "Hello, Java!";
            fw.write(str);
            System.out.println("文件写入成功!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

输出结果:输出'文件写入成功!',并在test.txt文件中写入'Hello, Java!'。

处理流

处理流是对节点流进行包装的流,用于提高输入和输出效率。

缓冲流

缓冲流分为缓冲字节流和缓冲字符流,用于提高输入和输出效率。

缓冲字节流

定义:缓冲字节流是对字节流进行包装的流,包括BufferedInputStream和BufferedOutputStream。

创建对象:

BufferedInputStream bis = new BufferedInputStream(new FileInputStream("文件路径"));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("文件路径"));

示例:

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

public class TestBufferedStream {
    public static void main(String[] args) {
        try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream("test.txt"));
             BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("test_copy.txt"))) {
            int data;
            while ((data = bis.read()) != -1) {
                bos.write(data);
            }
            System.out.println("文件复制成功!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

输出结果:输出'文件复制成功!',并在test_copy.txt文件中写入'Hello, Java!'。

缓冲字符流

定义:缓冲字符流是对字符流进行包装的流,包括BufferedReader和BufferedWriter。

创建对象:

BufferedReader br = new BufferedReader(new FileReader("文件路径"));
BufferedWriter bw = new BufferedWriter(new FileWriter("文件路径"));

示例:

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class TestBufferedReaderWriter {
    public static void main(String[] args) {
        try (BufferedReader br = new BufferedReader(new FileReader("test.txt"));
             BufferedWriter bw = new BufferedWriter(new FileWriter("test_copy.txt"))) {
            String line;
            while ((line = br.readLine()) != null) {
                bw.write(line);
                bw.newLine();
            }
            System.out.println("文件复制成功!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

输出结果:输出'文件复制成功!',并在test_copy.txt文件中写入'Hello, Java!'。

✅ 结论:缓冲流可以提高输入和输出效率,建议在实际开发中使用缓冲流。

转换流

转换流分为InputStreamReader和OutputStreamWriter,用于在字节流和字符流之间进行转换。

InputStreamReader

定义:InputStreamReader是用于将字节流转换为字符流的流。

创建对象:

InputStreamReader isr = new InputStreamReader(new FileInputStream("文件路径"), "字符编码");

示例:

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

public class TestInputStreamReader {
    public static void main(String[] args) {
        try (InputStreamReader isr = new InputStreamReader(new FileInputStream("test.txt"), "UTF-8")) {
            int data;
            while ((data = isr.read()) != -1) {
                System.out.print((char) data);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

输出结果:如果test.txt文件的内容是'Hello, Java!',则输出'Hello, Java!'。

OutputStreamWriter

定义:OutputStreamWriter是用于将字符流转换为字节流的流。

创建对象:

OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("文件路径"), "字符编码");

示例:

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

public class TestOutputStreamWriter {
    public static void main(String[] args) {
        try (OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("test.txt"), "UTF-8")) {
            String str = "Hello, Java!";
            osw.write(str);
            System.out.println("文件写入成功!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

输出结果:输出'文件写入成功!',并在test.txt文件中写入'Hello, Java!'。

对象流

对象流分为ObjectInputStream和ObjectOutputStream,用于将对象序列化和反序列化。

序列化

定义:序列化是将对象转换为字节流的过程。

示例:

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.Serializable;

class Person implements Serializable {
    private static final long serialVersionUID = 1L;
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

public class TestObjectOutputStream {
    public static void main(String[] args) {
        try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("person.txt"))) {
            Person person = new Person("张三", 20);
            oos.writeObject(person);
            System.out.println("对象序列化成功!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

输出结果:输出'对象序列化成功!',并在person.txt文件中写入序列化后的对象。

反序列化

定义:反序列化是将字节流转换为对象的过程。

示例:

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

public class TestObjectInputStream {
    public static void main(String[] args) {
        try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("person.txt"))) {
            Person person = (Person) ois.readObject();
            System.out.println("对象反序列化成功!");
            System.out.println(person);
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

输出结果:输出'对象反序列化成功!'和'Person{name='张三', age=20}'。

⚠️ 注意:要使对象可序列化,类必须实现Serializable接口。

文件操作

Java提供了File类,用于操作文件和目录。

File类的使用

示例:

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

public class TestFile {
    public static void main(String[] args) {
        // 创建文件对象
        File file = new File("test.txt");

        // 判断文件是否存在
        if (file.exists()) {
            System.out.println("文件已存在!");
        } else {
            System.out.println("文件不存在!");
            try {
                file.createNewFile();
                System.out.println("文件创建成功!");
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        // 判断是否是文件
        System.out.println("是否是文件:" + file.isFile());

        // 判断是否是目录
        System.out.println("是否是目录:" + file.isDirectory());

        // 获取文件的名称
        System.out.println("文件的名称:" + file.getName());

        // 获取文件的路径
        System.out.println("文件的路径:" + file.getPath());

        // 获取文件的绝对路径
        System.out.println("文件的绝对路径:" + file.getAbsolutePath());

        // 获取文件的大小
        System.out.println("文件的大小:" + file.length() + "字节");

        // 删除文件
        if (file.delete()) {
            System.out.println("文件删除成功!");
        } else {
            System.out.println("文件删除失败!");
        }
    }
}

输出结果:

文件不存在!
文件创建成功!
是否是文件:true
是否是目录:false
文件的名称:test.txt
文件的路径:test.txt
文件的绝对路径:C:\Users\Administrator\Desktop\test.txt
文件的大小:0字节
文件删除成功!

总结

本章我们学习了Java的IO流,包括字节流和字符流。其中,字节流(FileInputStream、FileOutputStream)、字符流(FileReader、FileWriter)、缓冲流(BufferedInputStream、BufferedOutputStream、BufferedReader、BufferedWriter)是本章的重点内容。

目录

  1. Java IO流:从字节流到字符流
  2. IO流概述
  3. 学习目标与重点提示
  4. IO流的基本概念
  5. 字节流
  6. 输入字节流
  7. FileInputStream
  8. 输出字节流
  9. FileOutputStream
  10. 字符流
  11. 输入字符流
  12. FileReader
  13. 输出字符流
  14. FileWriter
  15. 处理流
  16. 缓冲流
  17. 缓冲字节流
  18. 缓冲字符流
  19. 转换流
  20. InputStreamReader
  21. OutputStreamWriter
  22. 对象流
  23. 序列化
  24. 反序列化
  25. 文件操作
  26. File类的使用
  27. 总结
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 背包类动态规划详解:0-1、完全及二维费用
  • 2026 年 3 月 13 日 AI 行业动态:TADA 开源与多模型更新
  • Llama-Factory 常见错误及解决方案
  • 纯 Java 手写 TopoJSON 生成器:零依赖实战教程
  • 无人机三维路径规划:A*, RRT, APF 算法对比
  • Linux 6.19 ARM64 Crypto SM3 哈希子模块源码分析
  • AI 调参技巧:贝叶斯优化与 Optuna 实战
  • Python 爬虫使用代理 IP 避免封禁的原理与实现方案
  • Flutter 三方库 nanoid 详解:替代 UUID 的紧凑型唯一标识方案
  • 商汤开源 SenseNova-MARS 多模态自主推理模型
  • 二分查找实战:旋转排序数组最小值与点名问题解析
  • MC.JS WEBMC1.8 实战:构建在线多人沙盒游戏
  • Java 网络通讯核心协议详解:TCP、UDP、HTTP 与 HTTPS
  • Linux 进程核心原理精讲:从体系结构到实战操作
  • 基于星辰 RPA 实现小红书自动发文机器人
  • Spring AI Alibaba A2A 分布式智能体通信实战指南
  • Python 3.12 安装与 Anaconda 环境配置、pip 路径修改及 frozen 问题处理
  • 基于 Llama.cpp 本地部署大语言模型实战
  • C++ 异常处理机制与类型转换详解
  • Ubuntu 22.04 源码编译安装 libwebkit2gtk-4.1-0

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online