最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java實(shí)現(xiàn)文件重命名

 更新時(shí)間:2020年03月11日 12:46:03   作者:zjf1165  
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)文件重命名,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

背景

我們經(jīng)常在網(wǎng)上下載一些視頻教程,然而這些視頻命名規(guī)則各不相同,即使對(duì)于相同類型的文件名來說,當(dāng)文件數(shù)量很大且文件名全部是中文時(shí),文件排序是非規(guī)則的,因此本篇博客主要講解一種改變文件夾名稱使得文件按照規(guī)律進(jìn)行排序。

思路

根據(jù)文件名對(duì)文件進(jìn)行排序,然后重命名文件即可。

代碼

規(guī)則:如 將文件名中帶有 “第八講 ”替換成“8”:

構(gòu)建排序規(guī)則

/***
 * @param filePath 文件夾位置
 * @param startWorld 開始替換的字
 * @param endWorld 結(jié)束替換的字
*/
  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講-文件全名 的鍵值對(duì)存儲(chǔ)文件
    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 + " 不滿足替換條件");
      }
    }
    //對(duì)文件名進(jìn)行排序
    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;
    }
  }

將中文描述的數(shù)字轉(zhuǎn)換為數(shù)字,如將 一百二十轉(zhuǎn)換為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;

/**
 * 將一個(gè)文件夾中所有滿足條件的文件名替換
 * <p>
 * 條件:將從開始字到結(jié)束字的字符串替換成對(duì)應(yīng)的數(shù)字
 * <p>
 * 如:第八講 替換成 8
 */
public class Main {

  public static void main(String[] args) {
    Main m = new Main();
    // 文件夾位置
    String filePath = "D:\\新建文件夾\\OOAD與UML教學(xué)視頻";
    // 從哪個(gè)字(startWorld)開始替換到哪個(gè)字(endWorld)結(jié)束
    String startWorld = "第";
    String endWorld = "講";
    m.ReName(filePath, startWorld, endWorld);
  }

  /***
   * @param filePath 文件夾位置
   * @param startWorld 開始替換的字
   * @param endWorld 結(jié)束替換的字
   */
  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講-文件全名 的鍵值對(duì)存儲(chǔ)文件
    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 + " 不滿足替換條件");
      }
    }
    //對(duì)文件名進(jìn)行排序
    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;
  }
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳解Java編程中JavaMail API的使用

    詳解Java編程中JavaMail API的使用

    這篇文章主要介紹了詳解Java編程中JavaMail API的使用,通過JavaMail可以實(shí)現(xiàn)豐富的郵件類相關(guān)功能,需要的朋友可以參考下
    2015-11-11
  • 修改Maven settings.xml 后配置未生效的解決

    修改Maven settings.xml 后配置未生效的解決

    這篇文章主要介紹了修改Maven settings.xml 后配置未生效的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • 關(guān)于Java中避免空指針的方法

    關(guān)于Java中避免空指針的方法

    這篇文章主要介紹了關(guān)于Java中避免空指針的方法,空指針異常就是我們?cè)趯?duì)空對(duì)象進(jìn)行的任何操作都會(huì)報(bào)空指針異常,所謂的指針,就是java中的對(duì)象的引用,比如String?s;這個(gè)就是指針,需要的朋友可以參考下
    2023-07-07
  • 淺談@RequestBody和@RequestParam可以同時(shí)使用

    淺談@RequestBody和@RequestParam可以同時(shí)使用

    這篇文章主要介紹了@RequestBody和@RequestParam可以同時(shí)使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • String s = new String(''a '') 到底產(chǎn)生幾個(gè)對(duì)象

    String s = new String(''a '') 到底產(chǎn)生幾個(gè)對(duì)象

    這篇文章主要介紹了String s = new String(" a ") 到底產(chǎn)生幾個(gè)對(duì)象,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • Monaco?Editor實(shí)現(xiàn)sql和java代碼提示實(shí)現(xiàn)示例

    Monaco?Editor實(shí)現(xiàn)sql和java代碼提示實(shí)現(xiàn)示例

    這篇文章主要為大家介紹了Monaco?Editor代碼提示sql和java實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • Java8中的forEach使用及說明

    Java8中的forEach使用及說明

    這篇文章主要介紹了Java8中的forEach使用及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • 一文讓你徹底明白Java中的值傳遞和引用傳遞

    一文讓你徹底明白Java中的值傳遞和引用傳遞

    這篇文章主要給大家介紹了關(guān)于Java中值傳遞和引用傳遞的相關(guān)資料,值傳遞是指在調(diào)用函數(shù)時(shí)將實(shí)際參數(shù)復(fù)制一份傳遞到函數(shù)中,引用傳遞是指在調(diào)用函數(shù)時(shí)將實(shí)際參數(shù)的引用直接傳遞到函數(shù)中,需要的朋友可以參考下
    2023-10-10
  • 使用Java實(shí)現(xiàn)簡(jiǎn)單的區(qū)塊鏈程序的方法

    使用Java實(shí)現(xiàn)簡(jiǎn)單的區(qū)塊鏈程序的方法

    這篇文章主要介紹了使用Java實(shí)現(xiàn)簡(jiǎn)單的區(qū)塊鏈程序的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04
  • 防止SpringMVC攔截器攔截js等靜態(tài)資源文件的解決方法

    防止SpringMVC攔截器攔截js等靜態(tài)資源文件的解決方法

    本篇文章主要介紹了防止SpringMVC攔截器攔截js等靜態(tài)資源文件的解決方法,具有一定的參考價(jià)值,有興趣的同學(xué)可以了解一下
    2017-09-09

最新評(píng)論

新民市| 秭归县| 龙游县| 沅陵县| 云安县| 石渠县| 正宁县| 陆丰市| 周口市| 洱源县| 会理县| 岫岩| 重庆市| 桐乡市| 营山县| 喜德县| 鸡泽县| 闸北区| 定襄县| 江阴市| 甘洛县| 河南省| 辽源市| 体育| 鄂托克旗| 神农架林区| 太谷县| 天峻县| 靖州| 林芝县| 武胜县| 南乐县| 五峰| 淮滨县| 商洛市| 壶关县| 华池县| 垣曲县| 上杭县| 贺州市| 股票|