按处理数据单位分为:字节流和字符流;
字节流:按照字节读取数据(InputStream、OutputStream);
字符流:按照字符读取数据(Reader、Writer);
按流向分类:**输入流**和输出流;
输入流:从数据源到程序(InputStream、Reader读进来)
输出流:从程序到目的地(OutputStream、Writer写进去)
按功能分类:节点流和**处理流**;
节点流:直接向一个特定的I/O设备(磁盘、网络等)读取数据的流称为节点流;
处理流:程序通过一个间接流去调用节点流类,以达到更加灵活方便地读写各种类型的数据,这个间接流类就是处理流;
字节读取的应用实例
import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.util.HashMap; import java.util.Map; import java.util.Set; public class FileCharSum { public static void main(String[] args) throws Exception { File file=new File("E:/FileTest/a.txt"); InputStream is=new FileInputStream(file); BufferedInputStream bis=new BufferedInputStream(is); int len; Map<Character,Integer> map=new HashMap<>(); //定义一个字节数组,用于接收读取到的字节,一般大小设置为1024 byte[] bytes=new byte[1024]; String str = null; //提升作用域 //bis.read(bytes)表示实际读取到字节的长度 while((len=bis.read(bytes))!=-1){ //将字节进行拼接成字符串 String str2=new String(bytes,0,len); str=str2; System.out.println(len); System.out.println(str); } //将字符串转为char字符数组 char[] chars=str.toCharArray(); for (char c:chars){ //增强for循环遍历char数组 //调用map集合中的containKey方法,判断字符串是否存在map的键中 if (map.containsKey(c)){ //向map集合中添加数据 map.put(c,map.get(c)+1); }else { map.put(c,1); } } Set<Character> set = map.keySet(); for (Character c:set){ //增强for遍历输出 System.out.println(c+"----------"+map.get(c)); } } }字符读取的应用实例:
package com.ysh.demo.review04; import java.io.*; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.util.HashMap; import java.util.Map; import java.util.Set; public class FileCharSum02 { public static void main(String[] args) throws Exception { File file=new File("E:/FileTest/a.txt"); Reader is=new FileReader(file); BufferedReader br=new BufferedReader(is); Map<Character,Integer> map=new HashMap<>(); String str = null; String msg=null; //br.readLine()每次读取一行 while((msg=br.readLine())!=null){ str=msg; System.out.println(str); } char[] chars=str.toCharArray(); for (char c:chars){ if (map.containsKey(c)){ map.put(c,map.get(c)+1); }else { map.put(c,1); } } Set<Character> set = map.keySet(); for (Character c:set){ System.out.println(c+"----------"+map.get(c)); } } }例题:copy一个文件
import java.io.*; /** * 需求:copy一个文件 */ public class FileCharSum03 { public static void main(String[] args) throws Exception { File src=new File("E:/FileTest/a.txt"); Reader rd=new FileReader(src); BufferedReader brd=new BufferedReader(rd); File dest=new File("E:/FileTest/e.txt"); //将文件放到流中 Writer w=new FileWriter(dest); //将流放入到缓冲池中 BufferedWriter bw=new BufferedWriter(w); String msg; while ((msg=brd.readLine())!=null){ bw.write(msg); } bw.flush(); bw.close(); w.close(); brd.close(); rd.close(); } }