zoukankan      html  css  js  c++  java
  • 借Processing语言及IDE做DOS批处理的事务( 批量修改文件夹或文件的名字 )

    一直想用Processing语言做一些批处理的事务,因为其自带的IDE功能紧凑易用,极度轻量,又加上Java语言的生态极具友好,处理一些windows相关操作完全可行,简单快捷。
    这次就是用它做【批量修改文件夹或文件的名字】的任务。

    开端

    想在B站上发视频,发一个合集,找到了以往做的视频,有将近100个,但是格式都不太兼容,所以用了小丸工具箱批量压制,但是没有看清参数配置,所有的批处理过的文件的文件名最后加了“_batch”这一后缀。但是发往B站我不想要这个后缀。

    解决

    起初想用DOS批处理命令,但是好多细节不知,网上一查一时半会儿搞不定,所以放弃,改用设想的P5作为语言处理该问题。
    Java SDK 中对各操作系统的文件管理业务都有封装,比如File类,就可以修改Windows下的文件属性,包括文件名。先要导入包:

    import java.io.File;
    

    其次是要获取一个目录对象:

     String path = "E:\Projects\pr\老\新建文件夹";    //要遍历的路径
     File f = new File(path);   //获取文件夹对象
     if (!f.exists()) {
         System.out.println(path + " not exists");
         return;
     }
    

    获取该对象中的子对象:

    File fa[] = f.listFiles();   // 返回该路径下的所有文件夹及文件的绝对路径,返回值为File数组
    

    然后继续,遍历其数组,对于文件对象的话获取它的名字然后做相应处理,见下:

    for (int i = 0; i < fa.length; i++) {
      File fs = fa[i];
      if (fs.isDirectory()) {  //检测对象是否是文件夹
         System.out.println("文件夹: "fs.getName());
      } else {
        //System.out.println(fs.getName());   // getName 方法获取对象文件名
        String tempstr = fs.getName().substring(0, fs.getName().length()-10); //获取相应文件名[目标文件名],去除 _batch.MP4 字符
        //System.out.println(tempstr);
        String tt = path + "\"+ fs.getName();
        String tt2 = path + "\"+ tempstr +".mp4";
        println(tt2);
        new File(tt).renameTo(new File(tt2));  // 使用 rename 方法进行文件名更改!! 【注意】前后两路径一定是合法合理有效的,否则执行无效
      }
    }
    
    

    搞定!效果如下两图:

    原来

    image

    现在

    image


    结尾

    最后的完整源码:

    public static void main(String[] args) {
      getFileName();
    }
    
    public static void getFileName() {
      //String path = "G:/lxz/20130611"; // 路径
      String path = "E:\Projects\pr\老\新建文件夹";    //要遍历的路径
    
      File f = new File(path);
      if (!f.exists()) {
        System.out.println(path + " not exists");
        return;
      }
    
      File fa[] = f.listFiles();
      for (int i = 0; i < fa.length; i++) {
        File fs = fa[i];
        if (fs.isDirectory()) {
            System.out.println("文件夹: "fs.getName());
        } else {
          //System.out.println(fs.getName());
          String tempstr = fs.getName().substring(0, fs.getName().length()-10);
          //System.out.println(tempstr);
          String tt = path + "\"+ fs.getName();
          String tt2 = path + "\"+ tempstr +".mp4";
          println(tt2);
          new File(tt).renameTo(new File(tt2));
        }
      }
    }
    

    别有疑惑,这就是PDE文件源码!Processing自带的文本检测器如果检测到有静态的main入口函数,那么会屏蔽掉Processing的“setup draw”框架,这样跟原生的Java程序就是一样的!源码参考:

    import processing.core.*; 
    import processing.data.*; 
    import processing.event.*; 
    import processing.opengl.*; 
    
    import java.util.HashMap; 
    import java.util.ArrayList; 
    import java.io.File; 
    import java.io.BufferedReader; 
    import java.io.PrintWriter; 
    import java.io.InputStream; 
    import java.io.OutputStream; 
    import java.io.IOException; 
    
    public class bat4changename2 extends PApplet {
    
      public static void main(String[] args) {
        getFileName();
      }
    
      public static void getFileName() {
        //String path = "G:/lxz/20130611"; // 路径
        String path = "E:\Projects\pr\老\新建文件夹";    //要遍历的路径
    
        File f = new File(path);
        if (!f.exists()) {
          System.out.println(path + " not exists");
          return;
        }
    
        File fa[] = f.listFiles();
        for (int i = 0; i < fa.length; i++) {
          File fs = fa[i];
          if (fs.isDirectory()) {
              System.out.println("文件夹: "fs.getName());
          } else {
            //System.out.println(fs.getName());
            String tempstr = fs.getName().substring(0, fs.getName().length()-10);
            //System.out.println(tempstr);
            String tt = path + "\"+ fs.getName();
            String tt2 = path + "\"+ tempstr +".mp4";
            println(tt2);
            new File(tt).renameTo(new File(tt2));
          }
        }
      }
    }
    
    

    当然,上述语义是在原名基础上减去,那么如果是增添也是同理的,包括直接修改文件名或者文件夹的名字,比如批量修改成序列的格式“sequimgs_00000”、“sequimgs_00001”、“sequimgs_00002”等。

    希望此篇可以给予读者参考借鉴,Processing远比想象的要浪漫!~


    [参考文献]
    [1] https://www.cnblogs.com/xosg/p/8179066.html 【Java】对文件或文件夹进行重命名
    [2] https://blog.csdn.net/u014453898/article/details/79655338 Java遍历目录下的所有文件

  • 相关阅读:
    mycat实例(1)
    Java连接Oracle数据库的示例代码
    文本处理grep命令
    回调函数
    算法基础--快排序,堆排序,归并排序
    c++ 中double与string之间的转换,char *
    c++ 类型转换
    allocator class
    csapp读书笔记-并发编程
    树的遍历-递归方法,非递归方法
  • 原文地址:https://www.cnblogs.com/sharpeye/p/15136188.html
Copyright © 2011-2022 走看看