流的概念:
在面向对象的语言中,数据的输入和输出都是通过流来实现的。数据流是一种有顺序、有起点和终点的字符集合。
流的分类:
按照数据流的流向划分可以分为输入流和输出流。
输入流:可以对数据进行读取操作的类称为输入流,输入流都继承自抽象类InputStream
输出流:一个能过将字节流传送出去的类被称为输出流,所有的输入流都继承自抽象类OutStream
按照数据流的操作数据的单位分类可以分为字节流和字符流。
字符流:字符流对数据的操作一字符为单位,只能操作文本数据。
字节流:字节流对数据的操作以一个字节(8bit)为一个单位进行处理,因为所有文件在计算机中被转换为2进制,所以字节流可以操作所有数据。
注意:仅当操作纯文本数据是选用字符流进行操作,其他媒体数据一律选用字节流。
流的层次关系:
字节流常用类
InputStream 这是一个抽象类,表示所有字节输入流的超类
FileInputStream 用于读取诸如图像数据之类的原始字节流
BufferedInputStream 字节输入流缓冲区,能对字节输入流的功能进行增强
OutPutStream 这是一个抽象类,表示所有字节输入流的超类
FileOutputStream 用于写入诸如图像数据之类的原始字节流
BufferedOutStream 字节输出流缓冲区
字符流常用类
Reader 用于读取字符流的抽象类
FileReader 用于读取文本文件的便捷类
BufferedReader 用于读取文本的缓冲区,能对Reader功能进行增强
InputStreamReader 是字节流通向字符流的桥梁:能够将字节流转换为字符流
Writer 用于写入字符流的抽象类
FileWriter 用于写入文本文件的便捷类
BufferedWriter 将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。
OutStreamWriter 是字符流通向字节流的桥梁:
流操作规律:
1,明确源和目的。
源:输入流。InputStream Reader
目的:输出流。OutputStream Writer。
2,操作的数据是否是纯文本。
是:字符流。
不是:字节流。
3,当体系明确后,在明确要使用哪个具体的对象。
通过设备来进行区分:
源设备:内存,硬盘。键盘
目的设备:内存,硬盘,控制台。
流的使用:
字符流示例:拷贝一个字符文件
1 import java.io.*; 2 class CopyTxt 3 { 4 public static void main(String[] args) throws Exception 5 { 6 //定义文件读取流对象,并指定要拷贝的文本文件 7 FileReader fr=new FileReader("\\java\\CopyTxt.java"); 8 //定义文件写入流对象,并指定文件保存的位置 9 FileWriter fw=new FileWriter("C:\\CopyTxt.java"); 10 //定义读取流缓冲区对象,传入fr以便跟好的操作数据。 11 BufferedReader bufr=new BufferedReader(fr); 12 String line=null; 13 while((line=bufr.readLine())!=null) 14 { 15 fw.write(line+"\r\n");//读取一行就写入一行数据。 16 } 17 bufr.close();//关闭读取流 18 fw.close();//关闭写入流 19 } 20 21 }
字节流示例:从E:\\KuGou路径拷贝一个音乐文件,到C盘根目录。
1 import java.io.*; 2 class CopyMp3 3 { 4 public static void main(String[] args) throws Exception 5 { 6 //定义文件读取流对象,并指定要拷贝的Mp3文件 7 FileInputStream fis=new FileInputStream("E:\\KuGou\\刘德华 - 冰雨.mp3"); 8 //定义文件写入流对象,并指定文件保存的位置 9 FileOutputStream fos=new FileOutputStream("C:\\刘德华 - 冰雨.mp3"); 10 //定义读取流缓冲区对象,传入fis以便跟好的操作数据。 11 BufferedInputStream bufs=new BufferedInputStream(fis); 12 byte[] buf=new byte[1024]; 13 int len=0; 14 while((len=bufs.read(buf))!=-1) 15 { 16 fos.write(buf,0,len); 17 } 18 bufs.close();//关闭读取流 19 fos.close();//关闭写入流 20 } 21 22 }
键盘录入:将键盘录入的文本存入到指定文件中
1 import java.io.*; 2 class KeyBoarding 3 { 4 public static void main(String[] args) throws Exception 5 { 6 //获取键盘录入 7 BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in)); 8 //定义文件写入流,指定文件存放路径。定义文件写入流 9 FileWriter fw=new FileWriter("C:\\KeyBoarding.txt"); 10 String line=null; 11 while((line=bufr.readLine())!=null)// 12 { 13 fw.write(line+"\r\n");//如果读取一行数据不为空就写入输入流。 14 if(line.equals("over")) 15 break; 16 fw.flush();//刷新输入流 17 } 18 bufr.close();//关闭输出流缓冲区。 19 20 21 } 22 23 }
浙公网安备 33010602011771号