首页 > 编程笔记 > Java笔记 阅读:2

Java InputStreamReader和OutputStreamWriter的用法(附带实例)

使用 FileReader 读取项目中的文本文件,由于 IDEA 针对项目设置了 UTF-8 编码,当读取 Windows 系统创建的文本文件时,如果 Windows 系统默认的是 GBK 编码,文件读入内存就会出现乱码。

针对文本文件,使用一个字节流读入,希望将数据显示在控制台上。此时包含中文的文本数据就可能出现乱码现象,如下图所示。


转换流 java.io.InputStreamReader 是 Reader 的子类,是从字节流到字符流的桥梁。它读取字节,并使用指定的字符集将其解码为字符。它的字符集可以由名称指定,也可以接受平台的默认字符集。

转换流 java.io.OutputStreamWriter 是 Writer 的子类,是从字符流到字节流的桥梁。它使用指定的字符集,将字符编码为字节。它的字符集可以由名称指定,也可以接受平台的默认字符集。

转换流的语法格式如下:
【实例】将 test.txt 文件复制到同一个路径下,重命名为 test2.txt文件,代码如下:
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class InputOutputStreamReaderWriterDemo {
    public static void main(String[] args) {
        FileInputStream fileInputStream = null;
        FileOutputStream fileOutputStream = null;
        InputStreamReader inputStreamReader = null;
        OutputStreamWriter outputStreamWriter = null;
        try {
            fileInputStream = new FileInputStream("test.txt");
            inputStreamReader = new InputStreamReader(fileInputStream);
            fileOutputStream = new FileOutputStream("test2.txt");
            outputStreamWriter = new OutputStreamWriter(fileOutputStream);
            int a;
            while ((a = inputStreamReader.read()) != -1) {
                char c = (char) a;
                // 判断英文是否为小写,如果是小写就转换为大写
                if (Character.isLowerCase(c)) {
                    c = Character.toUpperCase(c);
                }
                outputStreamWriter.write(c);
            }
            System.out.println("文件处理完成");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                outputStreamWriter.close();
                inputStreamReader.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}
在上述代码中,精心构建了用于读取操作的 FileInputStream 与 InputStreamReader 的组合,以及针对写入操作的 FileOutputStream 与 OutputStreamWriter 的组合。通过这样的组合,程序能够从输入文件中逐个字符地读取数据,随后执行小写转大写的简单转换处理,最终将处理完毕的字符准确无误地写入输出文件中。为了确保字符编码的一致性,避免产生乱码现象,在代码中巧妙地运用了转换流技术。

相关文章