转换流:
1、字节流转化成字符流的桥梁。转换流。
InputStreamReader :字节到字符的桥梁。解码
OutputStreamWriter :字符到字节的桥梁。 编码
流的操作规律:
之所以要弄清楚这个规律从,是因为流对象太多,开发时不知道用哪个对象合适。
想要知道开发时用到哪些对象,只要通过四个明确即可:
1,明确源和目的(汇)
源:InputStream Reader
目的:OutputStream Writer
2, 明确数据是否是纯文本数据。
源: 如果是纯文本: Reader
否:InputStream
目的:是纯文本:Writer
否:OutputStream
3,明确具体的设备。
源设备:
硬盘:File
键盘:System.in
内存 :数组
网络:Socket流
目的设备:
硬盘:File
控制台:System.out
内存:数组
网络:Socket流
4,是否需要其他额外功能
(1),是否需要高效(缓冲区);
是,就加上buffer
2、字节流转化成字符流的桥梁。转换流。
package cn.itcast.io.p1.inputstream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.util.Scanner;
public class TransStreamDemo {
public static void main(String[] args) throws IOException {
// Scanner input=new Scanner(System.in);
//
System.out.println("请输入:");
//
// String temp=input.next();
//
// System.out.println(temp);
// 字节流
InputStream in = System.in;
/*int ch=in.read();
System.out.println(ch);*/
// 字节流转化成字符流的桥梁。转换流。
InputStreamReader isr = new InputStreamReader(in);
int ch=isr.read();
System.out.println((char)ch);
// 字符流
BufferedReader bufr = new BufferedReader(isr);
OutputStream out =System.out;
OutputStreamWriter osw = new OutputStreamWriter(out);
BufferedWriter bufw =new BufferedWriter(osw);
String line = null;
while ((line = bufr.readLine()) != null) {
if ("over".equals(line)) {
break;
}
// System.out.println(line.toUpperCase());
/*osw.write(line.toUpperCase()+"\r\n");
osw.flush();*/
bufw.write(line.toUpperCase());
bufw.newLine();
bufw.flush();
}
}
}
3、 * 1,需求: 将键盘录入的数据写入到一个文件中。
* 2,需求:将一个文本文件内容显示在控制台。
* 3,需求:将一个文件中的内容复制到另一个文件中。
package cn.itcast.io.p1.inputstream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import javax.imageio.stream.FileImageInputStream;
public class TransStreamDemo3 {
public static void main(String[] args) throws IOException {
/**
* 1,需求: 将键盘录入的数据写入到一个文件中。
* 2,需求:将一个文本文件内容显示在控制台。
* 3,需求:将一个文件中的内容复制到另一个文件中。
*/
//需求2:
BufferedReader bufr=new BufferedReader(new InputStreamReader(new FileInputStream("a.txt")));
//BufferedWriter bufw =new BufferedWriter(new OutputStreamWriter(System.out));
//需求1:
BufferedWriter bufw =new BufferedWriter(new OutputStreamWriter(new FileOutputStream("b.txt")));
String line =null;
System.out.println("请输入:");
while((line=bufr.readLine())!=null){
if("over".equals(line)){
break;
}
bufw.write(line.toUpperCase());//转换成大写
bufw.newLine();
bufw.flush();
}
}
}
4、需求中明确了指定编码表,就不可以使用FileWriter,因为fileWriter内部是使用默认的本地编码表。
只能使用其父类。OutputStreamWriter。
package cn.itcast.io.p1.inputstream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class TransStreamDemo4 {
public static void main(String[] args) throws IOException {
writeText_2();
}
public static void writeText_2() throws IOException {
OutputStreamWriter osw= new OutputStreamWriter(new FileOutputStream("gbk_2.txt"),"gbk");
osw.write("你好");
osw.close();
}
/**
* @throws IOException
*/
public static void writeText_1() throws IOException {
FileWriter fr=new FileWriter("gbk_1.txt");
fr.write("年后");
fr.close();
}
}
|
|