Java学习笔记之IO(十七):转换流

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();
	}
	
}

猜你喜欢

转载自blog.csdn.net/qq_29331365/article/details/78215594
今日推荐