转换流
InputStreamReader 和 OutputStreamWriter
处理流用于将字节流转化成字符流,字符流与字节流之间的桥梁InputStreamReader 的作用是把 InputStream 转换成 ReaderOutputStreamWriter 的作用是把 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.in21 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 的方法都不抛出 IOExceptionimport 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 的方法也不抛出 IOException3) 复制文件时可以使用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 }
---------------------------------------------------------------------------------------------------------------------
写入的文件------字节 二进制文件 人看不懂 但机器看得懂
--------------------------------------------------------------------------------------------------------------------
读出来的数据
---------------------------------------------------------------------------------------------------------------------------