将目标目录下的全部文件,重命名并拷贝到指定目录。通过文件名表示之前文件的层级关系

13 篇文章 0 订阅
10 篇文章 0 订阅

将目标目录下的全部文件,重命名并拷贝到指定目录。通过文件名表示之前文件的层级关系

  • 记录一下自己写的小脚本。

  • 使用场景举个例子:

  • 如:

    • 目标目录为D:\downlad\
    • 下面有图片D:\downlad\abc.picD:\downlad\pic\abc.picD:\downlad\pic\2020\abc.pic
    • 我想把D:\downlad\下各个文件都拷贝到平级目录,但又要保持原先文件在的排序
    • 然后就考虑重命名这些图片。
    • 比如拷贝到D:\trans\,这些文件就变成了:
      1.D:\trans\abc.pic,2.D:\trans\pic_abc.pic,3.D:\trans\pic_2020_abc.pic
    • 这样同文件夹下的文件就会有相同的文件前缀。可以应对大多数整理多层级文件的场景。
  • 下面直接上Java代码

  • 文件名转换工具类

/**
 * @author RedRush
 * @date 2021/6/28 10:53
 * @description: 将根目录下的全部文件,粘贴至目标地址,将之前的路径层级,通过文件名展示
 */
public class TransPicName {

    private String PICHEAD = "picture";		// 重命名的文件头,可以为空
    private String ROOT = "D:\\trans\\";	// 转换完成的输出路径
    private String SOURCE = "D:\\Downloads\\picture\\";	// 要处理目标路径

    @Test
    public void TestGetFiles(){
        int skip = 0, copy = 0;
        List<File> files = getFiles(SOURCE);
        CopyFile copyFile = new CopyFile();
        for(File f : files){
        	// 小文件不予处理,跳过。此块可以不要
            if (skip(f)){
                System.out.println("skip:" + f.getAbsolutePath());
                skip++;
                continue;
            }
            System.out.println(f.getAbsolutePath());
            // 截取要处理的文件路径,并处理路径分隔符
            String picUrl = f.getAbsolutePath().substring(SOURCE.length()).replaceAll("\\\\", "_");
            picUrl = ROOT + PICHEAD + special(picUrl);
            System.out.println(picUrl);
            copyFile.copy(f.getAbsolutePath(), picUrl);
            copy++;
        }
        System.out.println("拷贝任务结束,共" + files.size() + "个文件");
        System.out.println("拷贝" + copy + "个文件,跳过" + skip + "个文件");
    }

    // 目标文件名进行特判处理(比如删除空格,删除一些奇怪的东西)
    public String special(String str){
        String res = str.replaceAll(" ", "");
        // res = res.replaceAll("9", "");
        return res;
    }

    // 小文件跳过
    public boolean skip(File f){
        return f.length() < 1000;
    }

    // 获取目录下的全部文件
    public List<File> getFiles(String path){
        File root = new File(path);
        List<File> files = new ArrayList<File>();
        if(!root.isDirectory()){
            files.add(root);
        }else{
            File[] subFiles = root.listFiles();
            for(File f : subFiles){
                files.addAll(getFiles(f.getAbsolutePath()));
            }
        }
        return files;
    }
}

  • 拷贝工具类
public class CopyFile {

    /**
     * sFile为被拷贝文件的绝对路径
     * tFile为拷贝文件的输出路径
     * */
    public boolean copy(String sFile, String tFile){
        System.out.println("目标文件地址:"+tFile);
        try{
            FileInputStream fis = new FileInputStream(sFile);//创建输入流对象
            FileOutputStream fos = new FileOutputStream(tFile); //创建输出流对象               
            byte datas[] = new byte[1024*8];//创建搬运工具
            int len = 0;//创建长度   
            while((len = fis.read(datas))!=-1){ //循环读取数据
                fos.write(datas,0,len);
            }
            fis.close();//释放资源
            fis.close();//释放资源
        }catch (Exception e){
            e.printStackTrace();
            return false;
        }
        return true;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值