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

Java IO流

Java IO

在这里插入图片描述

一,什么是Java io 流

1.介绍

Java I/O(Input/Output)流是Java中处理输入和输出的机制。它提供了一种统一的方式来读取和写入各种类型的数据,包括字节、字符、对象等。I/O流是Java程序与外部世界进行交互的关键组件之一。

Java I/O流分为两类:字节流(Byte Streams)和字符流(Character Streams)。

  1. 字节流(Byte Streams):

    • InputStream:字节输入流的抽象基类,用于读取字节数据。
    • OutputStream:字节输出流的抽象基类,用于写入字节数据。
    • FileInputStream:从文件中读取字节的输入流。
    • FileOutputStream:向文件中写入字节的输出流。
    • BufferedInputStream / BufferedOutputStream:提供缓冲功能的字节输入流和输出流。
    • DataInputStream / DataOutputStream:允许以Java基本类型进行读写的字节输入流和输出流。
  2. 字符流(Character Streams):

    • Reader:字符输入流的抽象基类,用于读取字符数据。
    • Writer:字符输出流的抽象基类,用于写入字符数据。
    • FileReader:从文件中读取字符的输入流。
    • FileWriter:向文件中写入字符的输出流。
    • BufferedReader / BufferedWriter:提供缓冲功能的字符输入流和输出流。
    • InputStreamReader / OutputStreamWriter:将字节流转换为字符流的桥梁。
    • PrintWriter:提供格式化的输出功能的字符输出流。

此外,Java还提供了一系列其他类型的流,如对象流(ObjectStreams)、管道流(PipeStreams)等,用于处理特定的数据类型或应用场景。

通过使用Java I/O流,我们可以从文件、网络、系统控制台等来源读取数据,并将数据写入文件、网络、标准输出等目标。这使得Java程序能够与外部环境进行数据交换和持久化操作。

2.使用原因

Java I/O流的使用具有以下几个重要原因:

  1. 数据传输:I/O流提供了一种方便的方式来处理数据的输入和输出。通过使用I/O流,我们可以从文件、网络、键盘等输入源读取数据,并将数据写入文件、网络、标准输出等输出目标。这使得我们能够与外部环境进行数据交互和传输。

  2. 数据持久化:使用I/O流可以将数据持久化到硬盘或其他存储介质中。通过将数据写入文件,我们可以在程序关闭后仍然保留数据,以便下次使用时进行读取。

  3. 数据处理:I/O流提供了一种逐个字节或逐个字符处理数据的方式。这使得我们可以方便地对数据进行处理、解析和转换。例如,可以使用字节流或字符流读取文本文件并逐行处理其中的内容。

  4. 网络通信:Java的I/O流还支持网络通信。通过使用套接字(Socket)类,我们可以创建客户端和服务器之间的网络连接,并通过流读取和写入数据进行通信。

  5. 缓冲功能:I/O流提供了缓冲区的支持,可以提高读写的效率。通过使用缓冲流(如BufferedReader和BufferedWriter),我们可以减少实际访问I/O设备的次数,从而提高性能。

  6. 多种数据类型支持:Java I/O流提供了不同类型的流来处理不同类型的数据。除了基本的字节流和字符流,还有对象流(ObjectStreams)用于序列化和反序列化对象,以及其他特定类型的流用于处理二进制数据等。

总之,Java I/O流是处理输入和输出的一种重要机制,它提供了一种统一和灵活的方式来读取和写入不同类型的数据。通过使用I/O流,我们可以实现数据传输、持久化、处理和网络通信,使得Java程序能够与外部环境进行数据交互和操作。

二,示例代码

下面是关于Java IO流中的InputStreamOutputStreamFileInputStreamFileOutputStream的示例代码:

  1. 使用InputStreamOutputStream读取和写入字节数据:
import java.io.*;

public class ByteStreamExample {
    public static void main(String[] args) {
        try {
            InputStream inputStream = new FileInputStream("input.txt");
            OutputStream outputStream = new FileOutputStream("output.txt");

            int byteData;
            while ((byteData = inputStream.read()) != -1) {
                outputStream.write(byteData);
            }

            inputStream.close();
            outputStream.close();

            System.out.println("File copied successfully.");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
  1. 使用FileInputStreamFileOutputStream读取和写入文件:
import java.io.*;

public class FileReadWriteExample {
    public static void main(String[] args) {
        try {
            FileInputStream fileInputStream = new FileInputStream("input.txt");
            FileOutputStream fileOutputStream = new FileOutputStream("output.txt");

            byte[] buffer = new byte[1024];
            int bytesRead;
            while ((bytesRead = fileInputStream.read(buffer)) != -1) {
                fileOutputStream.write(buffer, 0, bytesRead);
            }

            fileInputStream.close();
            fileOutputStream.close();

            System.out.println("File copied successfully.");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

下面是使用Java IO流中的字符流FileReaderFileWriterBufferedReader/BufferedWriterInputStreamReader/OutputStreamWriter的示例代码:

  1. 使用FileReaderFileWriter读取和写入文本文件:
import java.io.*;

public class CharacterStreamExample {
    public static void main(String[] args) {
        try {
            FileReader fileReader = new FileReader("input.txt");
            FileWriter fileWriter = new FileWriter("output.txt");

            int charData;
            while ((charData = fileReader.read()) != -1) {
                fileWriter.write(charData);
            }

            fileReader.close();
            fileWriter.close();

            System.out.println("File copied successfully.");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
  1. 使用BufferedReaderBufferedWriter读取和写入文本文件:
import java.io.*;

public class BufferedCharacterStreamExample {
    public static void main(String[] args) {
        try {
            BufferedReader bufferedReader = new BufferedReader(new FileReader("input.txt"));
            BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("output.txt"));

            String line;
            while ((line = bufferedReader.readLine()) != null) {
                bufferedWriter.write(line);
                bufferedWriter.newLine();
            }

            bufferedReader.close();
            bufferedWriter.close();

            System.out.println("File copied successfully.");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
  1. 使用InputStreamReaderOutputStreamWriter进行字节流到字符流的转换:
import java.io.*;

public class ByteToCharacterStreamExample {
    public static void main(String[] args) {
        try {
            FileInputStream fileInputStream = new FileInputStream("input.txt");
            FileOutputStream fileOutputStream = new FileOutputStream("output.txt");

            InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream);
            OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream);

            int charData;
            while ((charData = inputStreamReader.read()) != -1) {
                outputStreamWriter.write(charData);
            }

            inputStreamReader.close();
            outputStreamWriter.close();

            System.out.println("File copied successfully.");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

请注意,在实际应用中,需要确保及时关闭流和正确处理异常。以上代码仅作为示例,实际使用时需要根据实际需求进行适当的优化和异常处理。

相关文章:

  • 从零开始搭建第一个django项目
  • 使用序列化技术保存数据 改进 IO流完成项目实战水果库存系统
  • Kotlin中的内联函数:提升性能与解决Lambda表达式参数问题
  • 模拟器-雷电-使用adb push或adb pull操作文件
  • Android Studio初学者实例:RecyclerView学习--模仿今日头条--续
  • 向量检索库Milvus架构及数据处理流程
  • 如何系统 如何进行SQL监控-执行SQL分析打印
  • 【每日一练】20231023
  • 紫光同创FPGA实现PCIE测速试验,提供PDS工程和Linux QT上位机源码和技术支持
  • 报错:The supplied javaHome seems to be invalid. I cannot find the java executable
  • 如何开发一个 Safari 插件
  • flutter开发的一个小小小问题,内网依赖下不来
  • RemObjects Elements 12.0 Crack
  • 【safetensor】Debug
  • 智慧河湖方案:AI赋能水利水务,构建河湖智能可视化监管大数据平台
  • 【Gensim概念】03/3 NLP玩转 word2vec
  • pdf导出实例(itestpdf)
  • android项目实践说明
  • 8.3 C++ 定义并使用类
  • 解决Kafka新消费者组导致重复消费的问题
  • 中央党校(国家行政学院)举行2025年春季学期第一批进修班毕业典礼
  • 中国银行副行长刘进任该行党委副书记
  • 五一假期上海推出首批16条“市民健康路线”,这些健康提示请收好
  • 民生访谈|规范放生活动、提升供水品质……上海将有这些举措
  • 央行副行长谈美债和美元波动:单一市场、单一资产的变动,对外储影响总体有限
  • 体坛联播|利物浦提前4轮夺冠,安切洛蒂已向皇马更衣室告别