java实现文件重命名

背景

我们经常在网上下载一些视频教程,然而这些视频命名规则各不相同,即使对于相同类型的文件名来说,当文件数量很大且文件名全部是中文时,文件排序是非规则的,因此本篇博客主要讲解一种改变文件夹名称使得文件按照规律进行排序。

思路

根据文件名对文件进行排序,然后重命名文件即可。

代码

规则:如 将文件名中带有 “第八讲 ”替换成“8”:

构建排序规则

/***
 * @param filePath 文件夹位置
 * @param startWorld 开始替换的字
 * @param endWorld 结束替换的字
*/
  private void ReName(String filePath, String startWorld, String endWorld) {
    File file = new File(filePath);
    if (!file.exists() || !file.isDirectory()) {
      System.out.println("文件不存在");
      return;
    }
    String[] list = file.list();
    //以 第xxx讲-文件全名 的键值对存储文件
    HashMap<String, String> paths = new HashMap<String, String>();
    for (String str : list) {
      int start = str.indexOf(startWorld) + 1;
      int end = str.indexOf(endWorld);
      if (start != 0 && end != -1) {
        paths.put(str.substring(start, end), str);
      } else {
        System.out.println("文件 " + str + " 不满足替换条件");
      }
    }
    //对文件名进行排序
    orderPath(filePath, endWorld, paths);
  }

排序

private void orderPath(String filePath, String endWorld,
      HashMap<String, String> paths) {
    if (paths.isEmpty()) {
      return;
    }
    TreeMap<Integer, String> map = new TreeMap<Integer, String>();
    for (String str : paths.keySet()) {
      map.put(parseInt(str), paths.get(str));
    }
    //重命名该文件
    ReNameFile(filePath, endWorld, map);
  }

重命名

private void ReNameFile(String filePath, String endWorld,
      TreeMap<Integer, String> map) {
    for (int i : map.keySet()) {
      String path = map.get(i);
      File f = new File(filePath + File.separator + path);
      File dest = new File(filePath + File.separator + i
          + path.substring(path.indexOf(endWorld) + 1));
      if (f.exists() && !dest.exists()) {
        f.renameTo(dest);
      }
      f = null;
      dest = null;
    }
  }

将中文描述的数字转换为数字,如将 一百二十转换为120

private int parseInt(String str) {
    if (str.length() == 1) {
      if (str.equals("十")) {
        return 10;
      }
      return getInt(str.charAt(0));
    } else {
      StringBuffer sb = new StringBuffer();
      for (int i = 0; i < str.length(); i++) {
        char c = str.charAt(i);
        if (c != '百' && c != '十') {
          sb.append(getInt(c));
        }
      }
      int res = Integer.parseInt(sb.toString());
      if (str.charAt(str.length() - 1) == '百') {
        res *= 100;
      } else if (str.charAt(str.length() - 1) == '十') {
        res *= 10;
      }
      if (str.charAt(0) == '十') {
        res += 10;
      }
      return res;
    }
  }

完整代码

import java.io.File;
import java.util.HashMap;
import java.util.TreeMap;

/**
 * 将一个文件夹中所有满足条件的文件名替换
 * <p>
 * 条件:将从开始字到结束字的字符串替换成对应的数字
 * <p>
 * 如:第八讲 替换成 8
 */
public class Main {

  public static void main(String[] args) {
    Main m = new Main();
    // 文件夹位置
    String filePath = "D:\\新建文件夹\\OOAD与UML教学视频";
    // 从哪个字(startWorld)开始替换到哪个字(endWorld)结束
    String startWorld = "第";
    String endWorld = "讲";
    m.ReName(filePath, startWorld, endWorld);
  }

  /***
   * @param filePath 文件夹位置
   * @param startWorld 开始替换的字
   * @param endWorld 结束替换的字
   */
  private void ReName(String filePath, String startWorld, String endWorld) {
    File file = new File(filePath);
    if (!file.exists() || !file.isDirectory()) {
      System.out.println("文件不存在");
      return;
    }
    String[] list = file.list();
    //以 第xxx讲-文件全名 的键值对存储文件
    HashMap<String, String> paths = new HashMap<String, String>();
    for (String str : list) {
      int start = str.indexOf(startWorld) + 1;
      int end = str.indexOf(endWorld);
      if (start != 0 && end != -1) {
        paths.put(str.substring(start, end), str);
      } else {
        System.out.println("文件 " + str + " 不满足替换条件");
      }
    }
    //对文件名进行排序
    orderPath(filePath, endWorld, paths);
  }

  private void orderPath(String filePath, String endWorld,
      HashMap<String, String> paths) {
    if (paths.isEmpty()) {
      return;
    }
    TreeMap<Integer, String> map = new TreeMap<Integer, String>();
    for (String str : paths.keySet()) {
      map.put(parseInt(str), paths.get(str));
    }
    //重命名该文件
    ReNameFile(filePath, endWorld, map);
  }

  private void ReNameFile(String filePath, String endWorld,
      TreeMap<Integer, String> map) {
    for (int i : map.keySet()) {
      String path = map.get(i);
      File f = new File(filePath + File.separator + path);
      File dest = new File(filePath + File.separator + i
          + path.substring(path.indexOf(endWorld) + 1));
      if (f.exists() && !dest.exists()) {
        f.renameTo(dest);
      }
      f = null;
      dest = null;
    }
  }

  private int parseInt(String str) {
    if (str.length() == 1) {
      if (str.equals("十")) {
        return 10;
      }
      return getInt(str.charAt(0));
    } else {
      StringBuffer sb = new StringBuffer();
      for (int i = 0; i < str.length(); i++) {
        char c = str.charAt(i);
        if (c != '百' && c != '十') {
          sb.append(getInt(c));
        }
      }
      int res = Integer.parseInt(sb.toString());
      if (str.charAt(str.length() - 1) == '百') {
        res *= 100;
      } else if (str.charAt(str.length() - 1) == '十') {
        res *= 10;
      }
      if (str.charAt(0) == '十') {
        res += 10;
      }
      return res;
    }
  }

  private int getInt(char c) {
    int res = -1;
    switch (c) {
    case '一':
      res = 1;
      break;

    case '二':
      res = 2;
      break;
    case '三':
      res = 3;
      break;
    case '四':
      res = 4;
      break;
    case '五':
      res = 5;
      break;
    case '六':
      res = 6;
      break;
    case '七':
      res = 7;
      break;
    case '八':
      res = 8;
      break;
    case '九':
      res = 9;
      break;
    case '零':
      res = 0;
      break;
    }
    return res;
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Java 实现文件批量重命名亲测可用(精简版)

    之前在网上下载了很多视频,解压缩后,发现里面每个文件前面都有一长串的网址,导致我根本看不清每个视频的名字到底叫什么? 网上搜了一些批量重命名的方法,可都不是我想要的,既然这样,干脆自己动手用Java写一个吧.测了一下应该没问题,现在分享出来. 先上代码: import java.io.File; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; /** * 重命名规则类 * @author ja

  • java文件的重命名与移动操作实例代码

    文件的重命名与移动操作 有时候为了对文件进行统一访问与管理,需要把文件进行重命名,并移动到新的文件夹,如何实现呢? 一枚简单的java小程序即可实现: part_1:需求:我需要把<(E:\BaiduYun\传智播客_张孝祥_Java多线程与并发库高级应用视频教程下载)>文件夹下的所有子文件夹下的视频文件重命名,并移动到新的位置<(E:\BaiduYun\张孝祥_Java多线程与并发库)>; part_2:目录结构如下: E:\BaiduYun E:\BaiduYun\传智播客_张

  • java文件重命名(文件批量重命名)实例程序代码分享

    首先,查到java里文件重命名的方法为:renameTo(); 我将180张图片放在d:\\backup下,用下面的程序进行重命名: 复制代码 代码如下: public void reName(){        String dir = "D:\\backup\\";        File file = new File(dir);        String fileName[] = file.list();        int number = fileName.length

  • java实现文件重命名功能

    本文实例为大家分享了java实现文件重命名的具体代码,供大家参考,具体内容如下 使用java i/o流读取文件夹中的所有的文件,并实现按照指定的规则进行重命名 1.直接建一个util类,来进行创建两个重命名的方法: package reName; import java.io.File; public class util { /** * 用于将文件名按照指定数字往后排 * @param startNum * @param url */ public static void sort(int s

  • Java文件批量重命名批量提取特定类型文件

    原因: 因为在网上下载视频教程,有的名字特别长,一般都是机构或者网站的宣传,不方便直接看到视频的简介,所以做了下面的第一个功能. 因为老师发的课件中,文件夹太多,想把docx都放在同一个文件夹下面,一个一个找出来太麻烦,所以做了第二个功能. 最近刚刚学了Java文件和流的知识,所以正好练练手,这也是自己的第一个exe程序,分享一下哈. (导出jar文件,以及用工具exe4j生成exe文件,这部分省略了哈) 用到的知识: 用到Java中文件,流的知识,以及简单的GUI知识. 功能: 功能一:去除文

  • java实现文件重命名的方法

    本文实例讲述了java实现文件重命名的方法.分享给大家供大家参考.具体如下: 下载的电影总是有一些存在网站名称等没用的信息 作为一个强迫症患者 一定要删除他们 package sys.file; import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.io.*; public class ZReName { public static void main(Str

  • Java实现文件批量重命名具体实例

    Windows操作系统可以实现重命名文件操作,却不能实现批量重命名.本实例实现了批量重命名功能,可以将一个文件夹内同一类型的文件按照一定的规则批量重命名.用户可以给出重命名模板,程序可以根据模板对相应的文件进行重命名.此外,还可以在重命名模板中添加特殊符号,程序会将这些特殊符号替换成重命名后的文件编号. 思路分析: 1.先看视图层,需要一些JLabel控件分别显示指示用户的信息,三个JTextField控件分别显示所选路径.输入文件名模板即输入扩展名,两个JButton控件分别用来浏览文件夹和开

  • java实现文件重命名

    背景 我们经常在网上下载一些视频教程,然而这些视频命名规则各不相同,即使对于相同类型的文件名来说,当文件数量很大且文件名全部是中文时,文件排序是非规则的,因此本篇博客主要讲解一种改变文件夹名称使得文件按照规律进行排序. 思路 根据文件名对文件进行排序,然后重命名文件即可. 代码 规则:如 将文件名中带有 "第八讲 "替换成"8": 构建排序规则 /*** * @param filePath 文件夹位置 * @param startWorld 开始替换的字 * @pa

  • Python和perl实现批量对目录下电子书文件重命名的代码分享

    经常会遇到下载的文件或电子书,名字中间都包含了一些网址信息,实际使用中由于名字太长不方便,下面的脚本使用正则表达式来对目录下的所有文件重命名: 例如: 修改前:[我们]Mac OS X for Unix Geeks[www.jb51.net].mobi 修改后:Mac OS X for Unix Geeks.mobi python代码如下: 复制代码 代码如下: import os import re def rename_dir(dir,regex,f):   if not os.path.i

  • php 随机数的产生、页面跳转、件读写、文件重命名、switch语句

    复制代码 代码如下: <?php num = rand(1,5); witch($num){ case 1: $fp1=fopen("f1.dat",'r'); $oname = fgets($fp1); $nname = date("YmdHis"); rename($oname,$nname); fclose($fp1); unlink("f1.dat"); $fp1=fopen("f1.dat",'w'); fwr

  • aspupload文件重命名及上传进度条的解决方法附代码第1/2页

    发现还没有aspupload这个组件的,这两样功能的解决方案,现把我的改进方案写在这里!谢谢  关于aspupload上传组件,文件重命名,进度条的问题解决方案!  共用到4个文件,分别是1.asp,2.asp,bar.asp,framebar.asp  运行第一个文件:1.asp,执行上传操作!  复制代码 代码如下: <% '''进度条 dim SPid,PID,barref Set UploadProgress = Server.CreateObject("Persits.Uploa

  • Zend Framework上传文件重命名的实现方法

    本文实例讲述了Zend Framework上传文件重命名的实现方法.分享给大家供大家参考,具体如下: 1. Zend Framework文件上传重命名 //实例化文件上专类 $fName=$this->_request->getPost('fName'); $adapter = new Zend_File_Transfer_Adapter_Http(); //存放上传文件的文件夹 $adapter->setDestination('/opt/lampp/htdocs/blog/uploa

  • fckeditor asp版本的文件重命名

    定位到:editor\filemanager\connectors\asp\io.asp 主要是修改:SanitizeFileName这个函数,并添加取得扩展名和文件重命名的方法,详细代码如下: 复制代码 代码如下: ' Do a cleanup of the file name to avoid possible problems function SanitizeFileName( sNewFileName ) Dim oRegex Dim oExt Set oRegex = New Reg

  • python实现批量文件重命名

    本文实例为大家分享了python批量文件重命名的具体代码,供大家参考,具体内容如下 问题描述 最近遇到朋友求助,如何将大量文件名前面的某些字符删除. 即将图中文件前的编号删除. Python实现 用到了python中的os模块,os模块中的rename方法可以实现对文件的重命名 import os #path为批量文件的文件夹的路径 path = 'd:\\renamefolder' #文件夹中所有文件的文件名 file_names = os.listdir(path) #外循环遍历所有文件名,

随机推荐