当前位置: 首页 > news >正文

Java IO 流:从入门到实践

目录

引言

什么是 IO 流?

IO 流的分类

1. 按数据流向

2. 按数据类型

3. 按功能

常用 IO 流类

IO 流的使用

1. 字节流示例:文件复制

2. 字符流示例:文件读写

3. 缓冲流示例:高效文件读写

4. 对象序列化示例

IO 流的最佳实践

总结


引言

在 Java 编程中,IO 流(Input/Output Stream)是处理输入输出操作的核心工具。无论是读写文件、网络通信,还是处理用户输入,IO 流都扮演着重要角色。本文将详细介绍 Java IO 流的基本概念、分类以及常见用法,并通过代码示例帮助你快速掌握 IO 流的使用。


什么是 IO 流?

IO 流是 Java 中用于处理输入输出操作的抽象概念。它可以将数据从一个地方传输到另一个地方,例如从文件读取数据或将数据写入网络。IO 流的核心思想是流式处理,即数据像水流一样从一个地方流向另一个地方。


IO 流的分类

Java 中的 IO 流可以分为以下几类:

1. 按数据流向

  • 输入流(Input Stream):用于从外部读取数据(如文件、网络)。

  • 输出流(Output Stream):用于向外部写入数据。

2. 按数据类型

  • 字节流(Byte Stream):以字节为单位读写数据,适用于所有类型的数据。

    • 输入流:InputStream

    • 输出流:OutputStream

  • 字符流(Character Stream):以字符为单位读写数据,适用于文本数据。

    • 输入流:Reader

    • 输出流:Writer

3. 按功能

  • 节点流(Node Stream):直接操作数据源(如文件、网络)。

  • 处理流(Processing Stream):对节点流进行封装,提供额外的功能(如缓冲、数据转换)。


常用 IO 流类

以下是 Java 中常用的 IO 流类:

分类字节流字符流
输入流InputStreamReader
输出流OutputStreamWriter
文件操作FileInputStreamFileReader
FileOutputStreamFileWriter
缓冲流BufferedInputStreamBufferedReader
BufferedOutputStreamBufferedWriter
数据转换DataInputStreamInputStreamReader
DataOutputStreamOutputStreamWriter
对象序列化ObjectInputStream-
ObjectOutputStream-

IO 流的使用

1. 字节流示例:文件复制

以下代码使用字节流实现文件的复制:

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

public class ByteStreamExample {
    public static void main(String[] args) {
        String sourceFile = "source.txt";
        String targetFile = "target.txt";

        try (FileInputStream fis = new FileInputStream(sourceFile);
             FileOutputStream fos = new FileOutputStream(targetFile)) {

            byte[] buffer = new byte[1024];
            int bytesRead;

            // 读取源文件并写入目标文件
            while ((bytesRead = fis.read(buffer)) != -1) {
                fos.write(buffer, 0, bytesRead);
            }

            System.out.println("文件复制完成!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

2. 字符流示例:文件读写

以下代码使用字符流实现文件的读写:

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

public class CharacterStreamExample {
    public static void main(String[] args) {
        String sourceFile = "source.txt";
        String targetFile = "target.txt";

        try (FileReader fr = new FileReader(sourceFile);
             FileWriter fw = new FileWriter(targetFile)) {

            int character;

            // 读取源文件并写入目标文件
            while ((character = fr.read()) != -1) {
                fw.write(character);
            }

            System.out.println("文件读写完成!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

3. 缓冲流示例:高效文件读写

以下代码使用缓冲流提高文件读写的效率:

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

public class BufferedStreamExample {
    public static void main(String[] args) {
        String sourceFile = "source.txt";
        String targetFile = "target.txt";

        try (BufferedReader br = new BufferedReader(new FileReader(sourceFile));
             BufferedWriter bw = new BufferedWriter(new FileWriter(targetFile))) {

            String line;

            // 逐行读取源文件并写入目标文件
            while ((line = br.readLine()) != null) {
                bw.write(line);
                bw.newLine(); // 写入换行符
            }

            System.out.println("文件读写完成!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

4. 对象序列化示例

以下代码演示如何使用对象流实现对象的序列化和反序列化:

import java.io.*;

class Student implements Serializable {
    private String name;
    private int age;

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

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

public class ObjectStreamExample {
    public static void main(String[] args) {
        String file = "student.dat";

        // 序列化对象
        try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(file))) {
            Student student = new Student("Alice", 20);
            oos.writeObject(student);
            System.out.println("对象序列化完成!");
        } catch (IOException e) {
            e.printStackTrace();
        }

        // 反序列化对象
        try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(file))) {
            Student student = (Student) ois.readObject();
            System.out.println("反序列化对象: " + student);
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

IO 流的最佳实践

  1. 使用 try-with-resources

    • 确保流在使用后自动关闭,避免资源泄漏。

  2. 使用缓冲流

    • 提高读写效率,减少频繁的 IO 操作。

  3. 处理异常

    • 捕获并处理 IOException,确保程序健壮性。

  4. 选择合适的流

    • 根据数据类型和场景选择字节流或字符流。


总结

Java IO 流是处理输入输出操作的重要工具。通过本文的介绍,你应该已经掌握了 IO 流的基本概念、分类以及常见用法。无论是文件操作、网络通信,还是对象序列化,IO 流都能帮助你高效地完成任务。

相关文章:

  • 基于javaweb的SpringBoot社区维修平台设计和实现(源码+文档+部署讲解)
  • 如何用Python开发一款可以标注课标单词的工具
  • 【Windows 同时安装 MySQL5 和 MySQL8 - 详细图文教程】
  • 全面汇总windows进程通信(二)
  • 【DeepSeek与鸿蒙HarmonyOS:开启应用开发新次元】
  • 机械行业金属材料重量计算器
  • CSS实现一张简易的贺卡
  • MySQL基本查询——表的增删查改
  • python-leetcode-N 皇后
  • 【Python爬虫(61)】Python金融数据挖掘之旅:从爬取到预测
  • Python Pandas库使用指南:从入门到精通
  • DeepSeek配合集成平台实现跨境系统的对接
  • GEE中的Map对象
  • Visual Studio打开文件后,中文变乱码的解决方案
  • Node.js技术原理分析系列——Node.js的perf_hooks模块作用和用法
  • gihub上适合练手的go项目
  • 网络安全蜜罐产品研究现状
  • 微信小程序调用火山方舟(字节跳动火山引擎)中的DeepSeek大模型
  • 单片机裸机编程-时机管理
  • 【LeetCode Hot100】搜索二维矩阵 II[特殊字符]二分查找 vs 线性搜索,Java实现,图解+代码
  • 安徽建设网官方网站/2024年新闻摘抄十条
  • 极简主义 网站/谷歌手机网页版入口
  • 网站开发企业培训/品牌推广策划
  • 洛阳网站推广优化/软件开发外包
  • 网站建设学习内容/宁波seo推广如何收费
  • 南阳淅川县制作网站的公司/沈阳百度seo关键词优化排名