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语句
ICP备案:
公安联网备案: