io和File的综合练习:

先来说说字节流和字符流的应用场景
image.png


练习一:

image.png

     /*
       拷贝一个文件夹考虑子文件夹
        */
        //源文件夹路径
        File src = new File("E:\\aaa-FIle学习测试\\bbb");
        //目的文件夹路径
        File dest= new File("E:\\aaa-FIle学习测试\\ccc");

        copy(src,dest);

    }
    public static void copy(File src,File dest) throws IOException {
        //若说目的文件夹不存在,则创建。
        dest.mkdirs();
        //进入源文件夹
        File[] files = src.listFiles();
        //增强for遍历获取其文件和子文件夹
        for (File file : files) {
            //判断文件
            if (file .isFile()){
                //是文件就直接拷贝,拷贝文件使用字节流
                //创建FileInputStream对象,并关联源文件
                FileInputStream fis=new FileInputStream(file);//"E:\\aaa-FIle学习测试\\bbb\\...txt"
                //创建FileOutputStream对象,并关联目的文件                   //file.getName()指文件名,并和目的文件夹拼接
                FileOutputStream fos=new FileOutputStream(new File(dest,file.getName()));//得到"E:\\aaa-FIle学习测试\\ccc\\...txt"
                //读取数据
                byte[]bytes=new byte[1024*1024*5];
                int len;
                while((len= fis.read(bytes))!=-1){
                    fos.write(bytes,0,len);
                }
                fos.close();
                fis.close();
            }else{
                //判断子文件夹,递归             //file.getName()指文件夹名,并和目的文件夹拼接
                copy(file,new File(dest,file.getName()));//第二个参数:"E:\\aaa-FIle学习测试\\ccc\\..."
            }
        }


练习二:

image.png
先了解一个知识:一个数和另一个数异或运算两次会还原
如:
相同是false(0),相异是true(1)

加密操作

 //字节流输入流并关联文件
        FileInputStream  fis=new FileInputStream("..\\ioDemo\\a.txt");

        //字节输出流
        FileOutputStream fos=new FileOutputStream("..\\ioDemo\\b.txt");
        int i;
        while((i= fis.read())!=-1){
            //异或加密
            fos.write(i^10);
        }

        fos.close();
        fis.close();

image.pngimage.png成功加密
解密:

public class Test03 {
    public static void main(String[] args) throws IOException {
        //字节输入流
        FileInputStream  fis=new FileInputStream("..\\ioDemo\\b.txt");

        //字节输出流
        FileOutputStream fos=new FileOutputStream("..\\ioDemo\\c.txt");
        int i;
        while((i=fis.read())!=-1){
           fos.write(i^10);
        };
    }
}

image.pngimage.png成功解密


练习三:

image.png

先写入数据

 //写入
        FileOutputStream fos=new FileOutputStream("..\\ioDemo\\d.txt");
        String str="2-1-9-4-7-8";
        byte[] bytes = str.getBytes();
        fos.write(bytes);


        fos.close();

再提取数据,把数字部分拿出来

         //读取
        FileReader fr = new FileReader("..\\ioDemo\\d.txt");

        //定义集合放数字
        ArrayList<Integer> list = new ArrayList<>();
        int b;//当前获取到的ascii值
        int i = 1;//用来记录当前获取的位置
        while ((b = fr.read()) != -1) {
            //发现规律:分布在奇数的位置1、3、5、7、9
            if (i % 2 != 0) {
                System.out.println((char) b);
                list.add(Character.getNumericValue((char) b));//调用方法变成int类型放入集合,其实这里转为int无意义,
                                                                         //因为放入还是放的字符
            }
            i++;
        }
        System.out.println(list);//[2, 1, 9, 4, 7, 8]

        //使用stream流:升序排序
        List<Integer> sorted = list.stream().sorted().collect(Collectors.toList());
        System.out.println(sorted);//[1, 2, 4, 7, 8, 9]

        //输出
        FileWriter fw = new FileWriter("..\\ioDemo\\d.txt");

        //遍历写入
        for (int j = 0; j < sorted.size(); j++) {
            if (j < sorted.size() - 1) {
                fw.write(sorted.get(j) + "-");
            } else {
                //如果是输出最后一个就不要“-”
                fw.write(sorted.get(j) + "");
            }
        }
        //关流
        fw.close();
        fr.close();

  • 13
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

成果、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值