IO流

IO流

IO流的种类

在这里插入图片描述

架构图

  • 字节流结构图

在这里插入图片描述

  • 字符流结构图

在这里插入图片描述

按处理数据单位分为:字节流字符流

字节流:按照字节读取数据(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();
    }
}


​	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值