在正常情况下,字节流可以对所有数据进行操作,但是有些时候在处理一些文本时我们要用到字符流,比如,查看文本时采用字符流更为方便,而在使用字节流时,当遇到中文及一些特殊字符时,就会出现乱码的情况,这是因为在UTF-8的字符编码下,中文占有3个字节。因此通常当我们在读取文本文件时,会选择使用字符流来处理。
try (
InputStreamReader inputStreamReader = new InputStreamReader(System.in);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
) {
String line = null;
while ((line = bufferedReader.readLine()) != null) {
// 如果读取的字符串为“exit”,则程序退出
if (line.equals("exit")) {
System.exit(1);
}
// 打印读取的内容
System.out.println("输入内容为:" + line);
}
} catch (IOException e) {
e.printStackTrace();
}
try (
FileOutputStream fileOutputStream = new FileOutputStream("output.txt");
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream, StandardCharsets.UTF_8)
) {
outputStreamWriter.write("hello word");
} catch (IOException e) {
e.printStackTrace();
}
try (
FileInputStream fileInputStream = new FileInputStream("input.txt");
FileOutputStream fileOutputStream = new FileOutputStream("output.txt");
InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, StandardCharsets.UTF_8);
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream, StandardCharsets.UTF_8);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
BufferedWriter bufferedWriter = new BufferedWriter(outputStreamWriter)
) {
int tmp;
while ((tmp = bufferedReader.read()) != -1) {
System.out.println((char) tmp);
bufferedWriter.write(tmp);
}
} catch (IOException e) {
e.printStackTrace();
}