转换流
InputStreamReader/OutputStreamWriter
是字节流与字符流之间的桥梁,能将字节流转换过程字符流,并且能为字节流指定字符集,可处理一个个的字符。
我们先使用System.in 和 System.out 来进行输入和输出操作,并且使用上字符缓冲流,为了我们识别的方便,我们将字节流转换成字符流,使用转换流。
import java.io.*;
/**
* 转换流: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) {
//e.printStackTrace();
System.out.println("操作异常");
}
}
}
我们发现输入和输出是一样的。
有时候文件字符编码与我们项目不同会出现乱码,我们可以使用字符集,读取和写出都是用字符集,这样更加保险。
我们以读取百度首页的网页代码为例,同样都使用转换流变成字符流方便我们辨认。
import java.io.*;
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.println((char) temp);
}
} catch (IOException e) {
System.out.println("操作异常");
}
}
}