转换流
InputStreamReader 和 OutputStreamWriter
处理流
用于将字节流转化成字符流,字符流与字节流之间的桥梁
InputStreamReader 的作用是把 InputStream 转换成 Reader
OutputStreamWriter 的作用是把 OutputStream 转换成 Writer
存在将字节流转换成字符流的转换流,因为字符流操作文本
更简单
不存在把字符流转换成字节流的转换流,因为没有必要
System.in 代表标准输入,即键盘输入,是 InputStream 的实
例
1 importjava.io.BufferedReader;2 importjava.io.BufferedWriter;3 importjava.io.FileNotFoundException;4 importjava.io.FileOutputStream;5 importjava.io.IOException;6 importjava.io.InputStream;7 importjava.io.InputStreamReader;8 importjava.io.OutputStreamWriter;9 importjava.io.UnsupportedEncodingException;10
11 public classTestInputStreamReader {12
13 public static voidmain(String[] args) {14 //任务需求,从键盘获取数据,写入磁盘文件15 //(3)提高读取效率
16 BufferedReader br = null;17 //(4)提高写入效率
18 BufferedWriter bw = null;19 try{20 //(1)数据源是标准的输入设备,键盘System.in
21 InputStream is =System.in;22 //(2)需要使用转换流,转换成字符流
23 InputStreamReader isr = new InputStreamReader(is,"gbk");24 br = newBufferedReader(isr);25 bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("D:\\systein.txt")));26 //(5)写入磁盘文件
27 String line = null;28 while(!"over".equals((line=br.readLine()))) {//键盘输入over表示结束
29 bw.write(line);30 bw.newLine();31 bw.flush();32 }33 } catch(UnsupportedEncodingException e) {34 //TODO 自动生成的 catch 块
35 e.printStackTrace();36 } catch(FileNotFoundException e) {37 //TODO 自动生成的 catch 块
38 e.printStackTrace();39 } catch(IOException e) {40 //TODO 自动生成的 catch 块
41 e.printStackTrace();42 }finally{43 //(6)关闭
44 if(bw != null) {45 try{46 bw.close();47 } catch(IOException e) {48 //TODO 自动生成的 catch 块
49 e.printStackTrace();50 }51 }52 if(br != null) {53 try{54 br.close();55 } catch(IOException e) {56 //TODO 自动生成的 catch 块
57 e.printStackTrace();58 }59 }60 }61 }62 }
View Code
控制台输入
------------------------------------------------------------------------------------------------------------------------------------------------------
文本文件
----------------------------------------------------------------------------------------------------------------------------------------
打印流
PrintStream和PrintWriter
PrintStream
1) PrintStream 提供了一系列的 print()和 println(),可以实现
将基本数据类型格式化成字符串输出。对象类型将先调用
toString(),然后输出该方法返回的字符串
2) System.out 就是 PrintStream 的一个实例,代表显示器
3) System.err 也是 PrintStream 的一个实例,代表显示器
4) PrintStream的输出功能非常强大,通常需要输出文本内容,
都可以将输出流包装成 PrintStream 后进行输出
5) PrintStream 的方法都不抛出 IOException
importjava.io.PrintStream;public classTestPrintStream {public static voidmain(String[] args) {
PrintStream ps= System.out;//显示器//PrintStream ps=System.err;
ps.println(123);
ps.println("哈哈哈");
}
}
View Code
PrintWriter
1) PrintStream 的对应字符流,功能相同,方法对应。
2) PrintWriter 的方法也不抛出 IOException
3) 复制文件时可以使用PrintWriter代替BufferedWriter完成,
更简单
1 importjava.io.BufferedReader;2 importjava.io.BufferedWriter;3 importjava.io.FileNotFoundException;4 importjava.io.FileOutputStream;5 importjava.io.FileWriter;6 importjava.io.IOException;7 importjava.io.PrintStream;8 importjava.io.PrintWriter;9 importjava.util.Date;10
11 public classTestPrintStream {12 public static void main(String[] args) throwsIOException {13 PrintWriter ps = new PrintWriter(new FileOutputStream("D:\\print.txt"));14 //无需类型转换,自动转成String类型
15 ps.println("hello");16 ps.println(11);17 ps.println(11.12);18 ps.println(newDate());19 ps.flush();20 ps.close();21
22 //只能写入字符串类型
23 BufferedWriter bw = new BufferedWriter(new FileWriter("D:\\a.txt"));24 bw.write("哈哈哈");25 //bw.write(234.4);26 //bw.write(new Date());
27 bw.close();28 }29 }
View Code
数据流
DataInputStream 和 DataOutputStream
1) 提供了可以存取所有 Java 基础类型数据(如:int,double
等)和 String 的方法。
2) 处理流,只针对字节流,二进制文件
3) 输入流链和输出流链
4) 注意:只要关闭上层流即可
1 importjava.io.BufferedInputStream;2 importjava.io.BufferedOutputStream;3 importjava.io.BufferedWriter;4 importjava.io.DataInputStream;5 importjava.io.DataOutputStream;6 importjava.io.FileInputStream;7 importjava.io.FileNotFoundException;8 importjava.io.FileOutputStream;9 importjava.io.IOException;10
11 public classTestDateStream {12
13 public static void main(String[] args) throwsIOException {14 //write();
15 read();16 }17
18 //读数据的方法
19 public static void read() throwsIOException {20 //(1)数据源
21 FileInputStream fis = new FileInputStream("E:\\data.txt");22 //(2)提高读取效率
23 BufferedInputStream bis = newBufferedInputStream(fis);24 //(3)数据流 增加对java基本数据类型和String的处理
25 DataInputStream dis = newDataInputStream(bis);26 //(4)读数据-----读数据的顺序与写数据的顺序一致
27 System.out.println(dis.readInt());28 System.out.println(dis.readBoolean());29 System.out.println(dis.readUTF());30 System.out.println(dis.readDouble());31 //关闭
32 dis.close();33 }34
35 public static void write() throwsIOException {36 /*//(1)目的地37 FileOutputStream fos = new FileOutputStream("E:\\data.txt");38 //(2)缓冲流提高写入效率39 BufferedOutputStream bos = new BufferedOutputStream(fos);40 //(3)数据流,增加对java基本数据类型和String的处理41 DataOutputStream dos = new DataOutputStream(bos);*/
42 //三行并作一行
43 DataOutputStream dos=new DataOutputStream(new BufferedOutputStream(new FileOutputStream("E:\\data.txt")));44 //(4)写入数据
45 dos.writeInt(99);46 dos.writeBoolean(true);47 dos.writeUTF("qwer");48 dos.writeDouble(22.7);49 //(5)关闭流
50 if (dos != null) {51 dos.close();52 }53 }54 }
View Code
---------------------------------------------------------------------------------------------------------------------
写入的文件------字节 二进制文件 人看不懂 但机器看得懂
--------------------------------------------------------------------------------------------------------------------
读出来的数据
---------------------------------------------------------------------------------------------------------------------------