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();

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-02-08 00:46:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-08 00:46:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-08 00:46:01       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-08 00:46:01       20 阅读

热门阅读

  1. 【力扣hot100】刷题笔记Day4

    2024-02-08 00:46:01       37 阅读
  2. SpringBoot实现即时通讯

    2024-02-08 00:46:01       24 阅读
  3. Centos7部署MetaBase-v0.48.3

    2024-02-08 00:46:01       32 阅读
  4. 【力扣】复写零,栈+双指针法

    2024-02-08 00:46:01       34 阅读
  5. LeetCodeLCR 114. 火星词典——拓扑排序

    2024-02-08 00:46:01       33 阅读
  6. Kylin系统下Qt的各种中文问题解决思路

    2024-02-08 00:46:01       35 阅读
  7. 1755. 最接近目标值的子序列和

    2024-02-08 00:46:01       34 阅读
  8. zstd字典压缩的大数据生产实践 & ctf逆向出题启发

    2024-02-08 00:46:01       29 阅读
  9. typedef 与#define 的概念及区别?

    2024-02-08 00:46:01       31 阅读
  10. 工具--Git详解

    2024-02-08 00:46:01       34 阅读
  11. MySQL数据库基础与SELECT语句使用梳理

    2024-02-08 00:46:01       26 阅读
  12. 查看 iOS 系统的日志或崩溃日志

    2024-02-08 00:46:01       33 阅读
  13. 如何使用 uniapp 开发(一)

    2024-02-08 00:46:01       37 阅读
  14. C++进阶--C++11包装器

    2024-02-08 00:46:01       28 阅读
  15. 【5G NR】移动通讯中使用的信道编解码技术

    2024-02-08 00:46:01       35 阅读