package com.io.g_sequence;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import org.junit.Test;
/*
转换流:
输入字节流的转换流:InputStreamReader; 将输入字节流转换成输入字符流;
输出字节流的转换流:OutputStreamReader; 将输出字节流转换成输出字符流;
不存在将字符流转换成字节流的转换流:因为字符流比字节流功能强大,一般只有增强功能,没有减弱功能的;
转换流作用:
1、如果所获取到的是一个字节流,但是需要转换成字符流使用,这时候就可以使用转换流;
2、使用转换流可以指定编码表进行读写文件;
*/
public class Demo7 {
// 读取控制台输入的内容
@Test
public void test1() throws IOException{
// 获取标准输入流
InputStream in = System.in;
// 当控制台输入一个字符的时候能够正常读取,但是输入多个字符的时候只能读取到第一个字符;
// 这是因为read()方法每次只能读取一个字节;
System.out.println("控制台输入:" + (char)in.read());
}
// 如果想从控制台一次读取一行数据,只能通过BufferedReader来实现,但是创建BufferedReader对象的时候
// 需要传入一个字符输入流;此时,就需要用到转换流了,将输入字节流转换成输入字符流;
@Test
public void test2() throws IOException{
// 获取标准输入流
InputStream in = System.in;
// 将输入字节流转换成输入字符流
InputStreamReader reader = new InputStreamReader(in);
// 通过输入字符流构建BufferedReader对象
BufferedReader buffer = new BufferedReader(reader);
// 读取数据
String line = buffer.readLine();
System.out.println("控制台输入:" + line);
// 关闭资源
buffer.close();
}
// 将输出字节流转换成输出字符流
@Test
public void test3() throws IOException{
// 找到目标文件
File file = new File("D:\\a.txt");
// 建立数据输出通道
FileOutputStream out = new FileOutputStream(file);
// 输出数据;方法1:将字符串转换成字节数组输出;
// out.write("大家好".getBytes());
// 输出数据;方法2:将输出字节流转换成输出字符流,直接输出字符串数据;
OutputStreamWriter writer = new OutputStreamWriter(out);
writer.write("你们好");
// 关闭资源
writer.close();
}
// 使用输出字节流的转换流指定码表写出数据
@Test
public void test4() throws IOException{
// 找到目标文件
File file = new File("D:\\a.txt");
// 建立数据输出通道
FileOutputStream out = new FileOutputStream(file);
// 将输出字节流转换成输出字符流,并指定编码
OutputStreamWriter writer = new OutputStreamWriter(out, "utf-8");
// 写出数据
writer.write("大家好");
// 关闭资源
writer.close();
}
// 使用输入字节流的转换流按指定码表读取数据
@Test
public void test5() throws IOException{
// 找到目标文件
File file = new File("D:\\a.txt");
// 建立数据输入通道
FileInputStream in = new FileInputStream(file);
// 将输入字节流转换成输入字符流,并指定编码;(utf-8读取数据正常;gbk读取的是乱码;因为是以utf-8写入的)
// InputStreamReader reader = new InputStreamReader(in, "utf-8");
InputStreamReader reader = new InputStreamReader(in, "gbk");
// 建立缓冲字符流
BufferedReader bufferedReader = new BufferedReader(reader);
// 写出数据
String str = bufferedReader.readLine();
System.out.println("读取数据:" + str);
// 关闭资源
bufferedReader.close();
}
}
Java学习笔记之IO(十七):转换流
最新推荐文章于 2024-09-04 19:37:09 发布