Java InputStreamReader和OutputStreamWriter的用法(附带实例)
使用 FileReader 读取项目中的文本文件,由于 IDEA 针对项目设置了 UTF-8 编码,当读取 Windows 系统创建的文本文件时,如果 Windows 系统默认的是 GBK 编码,文件读入内存就会出现乱码。
针对文本文件,使用一个字节流读入,希望将数据显示在控制台上。此时包含中文的文本数据就可能出现乱码现象,如下图所示。
转换流 java.io.InputStreamReader 是 Reader 的子类,是从字节流到字符流的桥梁。它读取字节,并使用指定的字符集将其解码为字符。它的字符集可以由名称指定,也可以接受平台的默认字符集。
转换流 java.io.OutputStreamWriter 是 Writer 的子类,是从字符流到字节流的桥梁。它使用指定的字符集,将字符编码为字节。它的字符集可以由名称指定,也可以接受平台的默认字符集。
转换流的语法格式如下:
【实例】将 test.txt 文件复制到同一个路径下,重命名为 test2.txt文件,代码如下:
针对文本文件,使用一个字节流读入,希望将数据显示在控制台上。此时包含中文的文本数据就可能出现乱码现象,如下图所示。

转换流 java.io.InputStreamReader 是 Reader 的子类,是从字节流到字符流的桥梁。它读取字节,并使用指定的字符集将其解码为字符。它的字符集可以由名称指定,也可以接受平台的默认字符集。
转换流 java.io.OutputStreamWriter 是 Writer 的子类,是从字符流到字节流的桥梁。它使用指定的字符集,将字符编码为字节。它的字符集可以由名称指定,也可以接受平台的默认字符集。
转换流的语法格式如下:
- InputStreamReader(InputStream in):创建一个使用默认字符集的字符流;
- InputStreamReader(InputStream in, String charsetName):创建一个指定字符集的字符流;
- OutputStreamWriter(OutputStream in):创建一个使用默认字符集的字符流;
- OutputStreamWriter(OutputStream in, String charsetName):创建一个指定字符集的字符流。
【实例】将 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 的组合。通过这样的组合,程序能够从输入文件中逐个字符地读取数据,随后执行小写转大写的简单转换处理,最终将处理完毕的字符准确无误地写入输出文件中。为了确保字符编码的一致性,避免产生乱码现象,在代码中巧妙地运用了转换流技术。
相关文章
- Java InputStreamReader和OutputStreamWriter类的用法(附带实例)
- Java InputStreamReader和OutputStreamWriter转换流的用法(附带实例)
- Java OutputStreamWriter和InputStreamReader的用法(附带实例)
- Java转换流(InputStreamReader和OutputStreamWriter)的用法
- Java转换流:InputStreamReader和OutputStreamWriter
- Java语句:Java空语句、复合语句和表达式语句
- Java switch case语句详解
- Java输出九九乘法表
- Java foreach语句的用法
- Java return语句