1. 首页
  2. 软件开发
  3. JAVA
  4. 用字节流和字符流读取写入数据

用字节流和字符流读取写入数据

  • 发布于 2024-09-26
  • 1 次阅读

一、字节流:


  1. 处理单位:

  2. 字节流以字节(8位二进制数据)为单位处理数据。

  3. 主要类:

  4. 输入流:InputStream 是所有字节输入流的基类。

  5. 输出流:OutputStream 是所有字节输出流的基类。

  6. 应用场景:

  7. 适合处理二进制文件,如图像、音频、视频等。

  8. 适合处理网络传输数据,因为网络通信通常基于字节流。

  9. 适合处理任何非文本数据。

  10. 常用类:

  11. FileInputStream 和 FileOutputStream:用于从文件中读取和写入字节数据。

  12. ByteArrayInputStream 和 ByteArrayOutputStream:用于从字节数组中读取和写入字节数据。

  13. Socket.getInputStream() 和 Socket.getOutputStream():用于从网络连接中读取和写入字节数据

1、写入方式:

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
//字节流写入
public class xieru {
    public static void main(String[] args) {
        //定义字符串变量,存入要写入的值
        String data="hello";
        try {
            //创建一个 FileOutputStream 对象,用于写入名为 "data.txt" 的文件。
            // 如果文件不存在,它将被创建;如果文件已存在,它的内容将被覆盖。
            FileOutputStream fileOutputStream = new FileOutputStream("data.txt");
            //这里使用 getBytes() 方法将字符串转换为字节数组,并通过 FileOutputStream 写入文件。
            fileOutputStream.write(data.getBytes());
            //这会在尝试打开不存在的文件时抛出。
        } catch (FileNotFoundException e) {
            //抛出一个新的 RuntimeException,并将原始异常作为原因传递给构造函数。
            throw new RuntimeException(e);
            //捕获 IOException,这会在 I/O 操作中出现错误时抛出。
        } catch (IOException e) {
            //同样抛出一个新的 RuntimeException,并将原始异常作为原因传递给构造函数。
            throw new RuntimeException(e);
        }

    }
}

2、读取方式:

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

//从文件读取数据
public class duqu {
    public static void main(String[] args) throws IOException {
//创建一个 FileInputStream 对象,用于读取名为 "data.txt" 的文件。
            FileInputStream fileInputStream = new FileInputStream("data.txt");
            int data;

           //循环读取文件中的数据。read() 方法每次读取一个字节
        // 如果文件结束,则返回 -1。
        while ((data=fileInputStream.read())!=-1){
            //将读取到的字节转换为字符并打印出来。
                System.out.println((char)data);
            }


    }
}

二、字符流:

  1. 处理单位:

  2. 字符流以字符(通常是 16 位 Unicode 字符)为单位处理数据。

  3. 主要类:

  4. 输入流:Reader 是所有字符输入流的基类。

  5. 输出流:Writer 是所有字符输出流的基类。

  6. 应用场景:

  7. 适合处理文本文件,如纯文本、XML、HTML 等。

  8. 适合处理需要编码/解码的数据,因为字符流可以指定字符集。

  9. 常用类:

  10. FileReader 和 FileWriter:用于从文件中读取和写入字符数据。

  11. BufferedReader 和 BufferedWriter:用于提高读写效率,通常与 FileReader 和 FileWriter 结合使用。

  12. InputStreamReader 和 OutputStreamWriter:用于将字节流转换为字符流,允许指定字符集。

1、写入:

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

//字符流 写数据
public class xieru2 {
    public static void main(String[] args) throws IOException {
        //定义要写入的字符串
        String data="我是影片中";
        //找到data2.txt文件,如果没有就新建,有就覆盖
        FileWriter fileWriter = new FileWriter("data2.txt");
        //将字符串写入文件。
        fileWriter.write(data);
//这行代码用于关闭 FileWriter 对象。
//关闭 FileWriter 对象时,会自动调用 flush() 方法以确保所有缓冲区中的数据都被写入文件。
//此外,关闭 FileWriter 对象还会释放与之关联的系统资源。
fileWriter.close();
    }
}

2、读取:

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

//读操作   文件=》内存=》控制台    字符流
public class duqu2 {
    public static void main(String[] args) throws IOException {
        //创建一个 FileReader 对象,用于读取名为 "data2.txt" 的文件。
        FileReader fileReader = new FileReader("data2.txt");
       // 定义一个 int 类型的变量 chars,用于存储从文件中读取的每个字符。
        int chars;
        //循环读取文件中的数据。read() 方法每次读取一个字符
        // 如果文件结束,则返回 -1。
        while ((chars= fileReader.read())!=-1){
         //将读取到的字符打印到控制台。   
            System.out.println((char) chars);
        }
    }
}



原文链接: https://blog.csdn.net/daibadetianshi/article/details/141057148