zoukankan      html  css  js  c++  java
  • 查找并拷贝目录中指定文件到某个文件夹

      说明:该方法是通过递归遍历的方式查找某个文件夹及其子文件夹中的所有文件,如果检测到是.jpg文件就将其复制到D:Download arget中。

      需求场景:手机中有大量的文件,但是,我们只关心其中格式是.jpg的文件,因为它们记录了我生活的许多美好回忆。手动查找效率低,故考虑写一个程序,自动识别。

    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.util.ArrayList;
    import java.util.List;
    
    public class BigOne {
        // 计数器,用于命名文件
        private static int id;
    
        public static void main(String[] args) {
            Long start = System.currentTimeMillis();
            String targetPath = "D:\Download\target";
            File dir = new File(targetPath);
            dir.mkdirs();//创建目录
            File source = new File("D:\train照片副本\image2");
            String fileType = ".jpg";
            search(source, targetPath, fileType);
            System.out.println("-----Done---------" + (System.currentTimeMillis() - start) + "文件数量:" + id);
            return;
        }
    
        public static void search(File source, String targetPath, String fileType) {
            File[] ds = null;
            if (source.isDirectory()) {
                ds = source.listFiles();
            }
            if (ds == null) {
                return;
            }
            System.out.println("ds长度=" + ds.length);
            List<File> js = new ArrayList();
            for (File aFile : source.listFiles()) {
                if (aFile.isFile() && aFile.getName().toLowerCase().endsWith(fileType)) {
                    js.add(aFile);
                }
            }
    
            for (File j : js) {
                System.out.println(j);    //打印文件名
                String name = ++id + "";
                while (name.length() < 5) {
                    name = "0" + name;
                }
                name += fileType; //创建一个File对象代表目标文件
                File t = new File(targetPath, name);//文件复制 源文件j 目标文件t
                try (FileInputStream fis = new FileInputStream(j);
                     FileOutputStream fos = new FileOutputStream(t)) {
                    byte[] data = new byte[16384];//16k
                    int len;
                    while ((len = fis.read(data)) != -1) {
                        fos.write(data, 0, len);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
    
            for (File d : ds) {
                search(d, targetPath, fileType);
            }
        }
    }
    
    

    Reference


      读后有收获,小礼物走一走,请作者喝咖啡。

    赞赏支持

  • 相关阅读:
    vue3.0提前了解系列一 通过cli快速搭建一个3.0项目
    vscode卡的飞起解决办法-其中之一
    常用正则表达式整理
    jq-outerhtml不能执行新元素内部的js解决方案
    前端面试题(亲身面试经验)
    MAC上Cisco AnyConnect删除不干净,造成无法重新安装的解决办法
    vue需要知道哪些才能算作入门以及熟练
    jquery版本轮播图(es5版本,兼容高)
    webpack4常用片段
    前端速度优化
  • 原文地址:https://www.cnblogs.com/east7/p/14833393.html
Copyright © 2011-2022 走看看