IO_转换流__字符集

版权声明: https://blog.csdn.net/weixin_40072979/article/details/83650896

InputStreamReader / OutputStreamWriter :是字节流与字符流之间的桥梁,能将字节流转换过程字符流,并且能为字节流指定字符集,可处理一个个的字符。

我们先使用System.in 和 System.out 来进行输入和输出操作,并且使用上字符缓冲流,为了我们识别的方便,我们将字节流转换成字符流,使用转换流

package com.jianshun;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

/**
 *转换流:InputStreamReader OutputStreamWriter 
 *1:以字符流的形式操作字节流(纯文本的)
 *2:指定字符集
 */
public class ConvertTest {
	public static void main(String[] args){
		//操作System.in 和 System.out
		try (BufferedReader read = new BufferedReader(new InputStreamReader(System.in)); 
			BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out));){
			//循环获取键盘的输入(exit推出),输出此内容
			String msg = "";
			while(!msg.equals("exit")){
				msg = read.readLine();//循环读取
				writer.write(msg);//循环写出
				writer.newLine();
				writer.flush();//强制刷新
			}
		} catch (IOException e) {
			System.out.println("操作异常");
		}
	}
}

你会发现输入和输出是一样的。 

有时候文件字符编码与我们项目不同会出现乱码,我们可以使用字符集,读取和写出都是用字符集,这样更加保险

我们以读取百度首页的网页代码为例,同样都使用转换流变成字符流方便我们辨认。

package com.jianshun;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.URL;

/**
 * 转换流:InputStreamReader OutputStreamWriter 1:以字符流的形式操作字节流(纯文本的) 2:指定字符集
 */
public class ConvertTest02 {
	public static void main(String[] args) {
		// 操作网络流
		try (BufferedReader is = //使用缓冲字符流
				new BufferedReader(
						new InputStreamReader(
								new URL("http://www.baidu.com").openStream(), "UTF-8"));
			BufferedWriter wr = 
					new BufferedWriter(
							new OutputStreamWriter(
									new FileOutputStream("baidu.html"),"UTF-8"));) {
			// 3,操作(读取)
			String line = null;
			while((line=is.readLine())!= null){
				wr.write(line);
				wr.newLine();
			}
			wr.flush();
		} catch (IOException e) {
			System.out.println("操作异常");
		}
	}

	public void test() {
		// 操作网络流
		try (InputStreamReader is = new InputStreamReader(new URL("http://www.baidu.com").openStream(), "UTF-8");) {
			// 3,操作(读取)
			int temp;
			while ((temp = is.read()) != -1) {
				System.out.print((char) temp);
			}
		} catch (IOException e) {
			System.out.println("操作异常");
		}
	}
}

猜你喜欢

转载自blog.csdn.net/weixin_40072979/article/details/83650896