转换流
InputStreamReader 和 OutputStreamWriter
处理流
用于将字节流转化成字符流,字符流与字节流之间的桥梁
InputStreamReader 的作用是把 InputStream 转换成 Reader
OutputStreamWriter 的作用是把 OutputStream 转换成 Writer
存在将字节流转换成字符流的转换流,因为字符流操作文本
更简单
不存在把字符流转换成字节流的转换流,因为没有必要
System.in 代表标准输入,即键盘输入,是 InputStream 的实
例
1 import java.io.BufferedReader; 2 import java.io.BufferedWriter; 3 import java.io.FileNotFoundException; 4 import java.io.FileOutputStream; 5 import java.io.IOException; 6 import java.io.InputStream; 7 import java.io.InputStreamReader; 8 import java.io.OutputStreamWriter; 9 import java.io.UnsupportedEncodingException; 10 11 public class TestInputStreamReader { 12 13 public static void main(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 = new BufferedReader(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 }
控制台输入
------------------------------------------------------------------------------------------------------------------------------------------------------
文本文件
----------------------------------------------------------------------------------------------------------------------------------------
打印流
PrintStream和PrintWriter
PrintStream
1) PrintStream 提供了一系列的 print()和 println(),可以实现
将基本数据类型格式化成字符串输出。对象类型将先调用
toString(),然后输出该方法返回的字符串
2) System.out 就是 PrintStream 的一个实例,代表显示器
3) System.err 也是 PrintStream 的一个实例,代表显示器
4) PrintStream的输出功能非常强大,通常需要输出文本内容,
都可以将输出流包装成 PrintStream 后进行输出
5) PrintStream 的方法都不抛出 IOException
import java.io.PrintStream; public class TestPrintStream { public static void main(String[] args) { PrintStream ps = System.out;//显示器 //PrintStream ps=System.err; ps.println(123); ps.println("哈哈哈"); } }
PrintWriter
1) PrintStream 的对应字符流,功能相同,方法对应。
2) PrintWriter 的方法也不抛出 IOException
3) 复制文件时可以使用PrintWriter代替BufferedWriter完成,
更简单
1 import java.io.BufferedReader; 2 import java.io.BufferedWriter; 3 import java.io.FileNotFoundException; 4 import java.io.FileOutputStream; 5 import java.io.FileWriter; 6 import java.io.IOException; 7 import java.io.PrintStream; 8 import java.io.PrintWriter; 9 import java.util.Date; 10 11 public class TestPrintStream { 12 public static void main(String[] args) throws IOException { 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(new Date()); 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 }
数据流
DataInputStream 和 DataOutputStream
1) 提供了可以存取所有 Java 基础类型数据(如:int,double
等)和 String 的方法。
2) 处理流,只针对字节流,二进制文件
3) 输入流链和输出流链
4) 注意:只要关闭上层流即可
1 import java.io.BufferedInputStream; 2 import java.io.BufferedOutputStream; 3 import java.io.BufferedWriter; 4 import java.io.DataInputStream; 5 import java.io.DataOutputStream; 6 import java.io.FileInputStream; 7 import java.io.FileNotFoundException; 8 import java.io.FileOutputStream; 9 import java.io.IOException; 10 11 public class TestDateStream { 12 13 public static void main(String[] args) throws IOException { 14 //write(); 15 read(); 16 } 17 18 //读数据的方法 19 public static void read() throws IOException { 20 //(1)数据源 21 FileInputStream fis = new FileInputStream("E:\data.txt"); 22 //(2)提高读取效率 23 BufferedInputStream bis = new BufferedInputStream(fis); 24 //(3)数据流 增加对java基本数据类型和String的处理 25 DataInputStream dis = new DataInputStream(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() throws IOException { 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 }
---------------------------------------------------------------------------------------------------------------------
写入的文件------字节 二进制文件 人看不懂 但机器看得懂
--------------------------------------------------------------------------------------------------------------------
读出来的数据
---------------------------------------------------------------------------------------------------------------------------