1

我正在学习 java io 概念,我需要澄清一个疑问。

我正在尝试使用像 BufferedReader 这样的阅读器读取文件,并将其写入像 BufferedOutputstream 这样的 OutputStream。这是我的代码示例。

import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;

public class ReaderToStream
{
    public static void main(String[] args)throws Exception 
    {
        BufferedReader br = new BufferedReader(new FileReader(new File("f1.txt")));
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(new File("f2.txt")));
        
        int ch = 0;
        
        while((ch=br.read())!=-1)
        {
            bos.write(ch);
        }
        
        
        bos.close();
        br.close();
    }
}

我知道阅读器读取字符,输出流写入字节,但是我们如何才能完美地处理它,因为当我的文件有正常的英文字符时,没有问题,但是当我有符号或其他语言字符时(例如காலை வணக்கம்,早上好)它将文本复制到一些随机文本(如æ©ä`好)。

谁能帮助我深入了解这些主题?

感谢您的帮助,如果被问到任何愚蠢的问题,我们深表歉意。

4

1 回答 1

0

您可以使用名为OutputStreamWriter的适配器设计模式实现。

OutputStreamWriter 是从字符流到字节流的桥梁

您使用此类的代码片段如下所示:

BufferedReader br = new BufferedReader(new FileReader("f1.txt"));
OutputStreamWriter out = new OutputStreamWriter(
    new BufferedOutputStream(new FileOutputStream("f2.txt"))
);     
int ch;
while ((ch = br.read()) != -1) {
    out.write(ch);
}
br.close();
out.close();

此外,您可以指定编码:

Charset oneWay = Charset.forName("UTF-8");
Charset anotherWay = StandardCharsets.UTF_8;
OutputStreamWriter out1 = new OutputStreamWriter(..., oneWay);
OutputStreamWriter out2 = new OutputStreamWriter(..., anotherWay);
于 2021-04-14T13:43:52.560 回答