Java基础——六、IO

六、IO

输入输出(I/O流)是Java中用于读写数据的机制,它是处理输入和输出的抽象概念。在Java中、所有的输入输出都被视为数据流,无论是从文件、网络、键盘还是其它设备。

Java的输入/输出(I/O)系统提供了一组用于读写数据的类和接口,这些类和接口被分为不同的层次,用于处理不同类型的I/O操作。

一、基本概念

1.流(Stream)

流是数据的顺序序列,它可以是输入流(用于读写数据)或输出流(用于写入数据)。流与数据源或数据目的地之间建立了连接,通过流可以实现对数据的读取和写入

2.输入流(Input Stream)

用于从数据源(如文件、网络、键盘等)读取数据的流。输入流提供了一种逐字节读取数据的方式。

3.输出流(Output Stream)

用于向数据目的地(如文件、网络、屏幕等)写入数据的流。输出流提供了一种逐字节写入数据的方式。

二、分类

在Java中,输入输出流可以根据其操作对象的不同进行分类,主要分为字节流和字符流两种类型。

1.字节流

处理原始的字节数据。

  • 字节流以字节为单位进行读写操作,适用于处理二进制数据或字节流形式的文本数据
  • InputStreamOutputStream 是字节流的抽象基类。
  • 常用子类:
    • FileInputStreamFileOutputStream:用于文件操作。
    • ByteArrayInputStreamByteArrayOutputStream:用于内存缓冲区操作。
    • BufferedInputStreamBufferedOutputStream:提供缓冲机制,提高性能。
常用示例
public class ByteStreamExample {
   
    /**
     * 此处实现了从一个文件复制到另一个文件的功能,使用了字节流进行文件的读取和写入。
     * 特别地,展示了如何处理文件输入/输出流,以及如何在读取到文件末尾时终止循环。
     */
    public static void main(String[] args) throws IOException {
   
        FileInputStream in = null;
        FileOutputStream out = null;
        String basePath = "io/src/main/resources/base/";
//        System.out.println("Current working directory: " + System.getProperty("user.dir"));
        try {
   
            // 打开一个文件输入流,用于从指定的文件读取数据。
            in = new FileInputStream(basePath + "ByteStreamExampleInput.txt");
            // 打开一个文件输出流,用于将读取的数据写入到指定的文件。
            out = new FileOutputStream(basePath + "ByteStreamExampleOutput.txt");
            int data;
            // 通过循环读取文件中的每个字节,直到文件末尾。
            while ((data = in.read()) != -1) {
   
                // 将读取到的字节写入到输出文件中。
                out.write(data);
            }
        } catch (IOException e) {
   
            e.printStackTrace();
        }
        // 注意:确保在操作完成后关闭流,即使发生异常也要关闭,在finally块中显式关闭流,养成好习惯。
        finally {
   
            if (in != null) {
   
                in.close();
            }
            if (out != null) {
   
                out.close();
            }
        }
    }
}

2.字符流(Character Stream)

处理字符数据(文本),适用于处理文本文件。

  • 字符流以字符为单位进行读写操作适用于处理文本数据
  • 字符流能够自动处理字符编码和解码的细节,提供了更方便的字符级别操作
  • ReaderWriter 是字符流的抽象基类。
  • 常用子类:
    • FileReaderFileWriter:用于文件操作。
    • CharArrayReaderCharArrayWriter:用于内存缓冲区操作。
    • BufferedReaderBufferedWriter:提供缓冲机制,提高性能。
    • InputStreamReaderOutputStreamWriter:用于字节流和字符流的桥接。
常用示例
public class CharStreamExample {
   
    /**
     * 本方法实现了从一个文本文件读取数据,并将这些数据写入到另一个文本文件。
     * 它使用了FileReader和FileWriter类来处理文件的读写操作。
     */
    public static void main(String[] args) throws IOException {
   
        String basePath = "io/src/main/resources/base/";
        // 初始化FileReader和FileWriter对象,用于文件的读写。
        FileReader reader = null;
        FileWriter writer = null;
        try {
   
            // 创建FileReader对象,用于读取指定路径的文本文件。
            reader = new FileReader(basePath + "CharStreamExampleInput.txt");
            // 创建FileWriter对象,用于写入指定路径的文本文件。
            writer = new FileWriter(basePath + "CharStreamExampleOutput.txt")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值