java 转换流 打印流 数据流
转换流
InputStreamReader 和 OutputStreamWriter
处理流
用于将字节流转化成字符流,字符流与字节流之间的桥梁
InputStreamReader 的作用是把 InputStream 转换成 Reader
OutputStreamWriter 的作用是把 OutputStream 转换成 Writer
存在将字节流转换成字符流的转换流,因为字符流操作文本
更简单
不存在把字符流转换成字节流的转换流,因为没有必要
System.in 代表标准输入,即键盘输入,是 InputStream 的实
例
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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完成,
更简单
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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) 注意:只要关闭上层流即可
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 }
---------------------------------------------------------------------------------------------------------------------
写入的文件------字节 二进制文件 人看不懂 但机器看得懂
--------------------------------------------------------------------------------------------------------------------
读出来的数据
---------------------------------------------------------------------------------------------------------------------------
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步