zoukankan      html  css  js  c++  java
  • Java基础IO文件拷贝练习题

    /**
    * 编写一个程序,把指定目录下的所有的带.java文件都拷贝到另一个目录中,拷贝成功后,把后缀名是.java的改成.txt。
    */

    1.我们看到这个题还是用大化小的思想来做
    分析:1.拷贝 >>> 选择什么流呢??>>>拷贝我在上篇博客中写到,我们用字节流,字符流只读只写
    2.java结尾 >> 我们可以想到String中的endsWith()方法.
    3.拷贝成功后再改后缀名>>File中有一个后缀名的方法renameTo()的方法
    4.如果就收拷贝的文件的文件夹中有相同的名字的文件怎么办呢?? 想想这个

    我们看代码:第一步:1.拷贝 >>> 选择什么流呢??>>>拷贝我在上篇博客中写到,我们用字节流,字符流只读只写
             2.java结尾 >> 我们可以想到String中的endsWith()方法.

    /*
         *文件的拷贝
         */
        private static void copy(File src, File dest) throws IOException {
            File[] files = src.listFiles();
            //判断数组是否为空
            if (files != null) {
                //遍历数组
                for (File file : files) {
                    //是文件并且以java结尾的文件
                    if (file.isFile() && file.getName().endsWith(".java")) {
                        //缓冲流拷贝   速度快
                        BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
                        BufferedOutputStream bos = new BufferedOutputStream(
                                new FileOutputStream(new File(dest, file.getName())));
    
                        byte[] by = new byte[1024];
                        int len = 0;
                        while ((len = bis.read(by)) != -1) {
                            bos.write(by, 0, len);
                        }
                        //关流
                        bos.close();
                        bis.close();
                        //如果是文件
                    } else if (file.isDirectory()) {
                        //在判断这个文件夹是不是空的或者没有java文件 那样我们就不要复制了 定义remove()
                        if (remove(file)) {
                            File newfile = new File(dest, file.getName());
                            newfile.mkdirs();
                            copy(file, newfile);
                        }
                    }
                }
            }
    
        }
    
        private static boolean remove(File file) {
            File[] files = file.listFiles();
            //判断数组是否为空
            if (file != null) {
                for (File file2 : files) {
                    //是文件并且以java结尾的文件 返回真
                    if (file2.isFile() && file2.getName().endsWith(".java")) {
                        return true;
                        //这里是关键  不经要是文件  而且还要满足文件中要包含java文件
                    } else if (file2.isDirectory() && remove(file2)) {
                        return true;
                    }
                }
            }
            //条件不符合返回false
            return false;
        }
    }

    第二步:3.拷贝成功后再改后缀名>>File中有一个后缀名的方法renameTo()的方法 
        4.如果就收拷贝的文件的文件夹中有相同的名字的文件怎么办呢?? 想想这个

        //.java修改成.txt  
        private static void revamp(File dest) throws IOException{    
            File[] file = dest.listFiles();
            for (File file2 : file) {
                if(file2.isFile()){
                    //获取文件名称字符串
                    String sb = file2.getName();
                        //判断是否是Java文件
                    if(sb.endsWith(".java")){
                        StringBuilder sb1 = new StringBuilder(sb);
                        //替换  把java字符串  替换成.txt字符串
                        sb1.replace(sb1.toString().indexOf(".java"), sb1.length(), ".txt");
                        //新建文件
                        File newfile = new File(dest, sb1.toString());
                        
                        //再来一次循环  循环本次数组中的文件和文件夹
                        for (File file3 : file) {
                            //如果里面有相同的文件的就删除在    重命名
                            if(file3.isFile() && newfile.getName().equals(file3.getName())){
                                file3.delete();
                            }
                        }
                        //判断文件夹中是否存在重名
                        file2.renameTo(newfile);
                    }
                    //如果是文件  就递归
                } else if (file2.isDirectory()) {
                    revamp(file2);
                }
            }
        }

    main方法

    public static void main(String[] args) throws IOException {
            //封装文件地址
            File src = new File("E:\\IO流");
            File dest = new File("E:\\IO");
            //拷贝
            copy(src, dest);
            //重命名
            revamp(dest);
        }
  • 相关阅读:
    java基本数据类型及运算的注意事项
    B-Tree 和 B+Tree 结构及应用,InnoDB 引擎, MyISAM 引擎
    软件工程与软件开发模型、软件开发方法
    2020年3月份Unity3D游戏源码合集-免费下载
    独立游戏开发必备!8个效果不错的Unity3D 免费模型资源包
    2019年4月份整理的Unity3D 20个实用插件-免费下载
    2019年4月份整理的Unity3D游戏完整源码
    2019年3月整理的2D美术资源合集
    画面效果都不错!20个精品Unity3D着色器插件
    Unity3D中UnityPlayerActivity与UnityPlayerNativeActivity有什么区别
  • 原文地址:https://www.cnblogs.com/hd976521/p/6287712.html
Copyright © 2011-2022 走看看