繁体   English   中英

Java重命名一堆文件并将其移动到新文件夹

[英]java rename bunch of files and move them to a new folder

这样的话。

我有一个包含更多文件夹的根文件夹,并且每个文件夹都有一堆文件。 这些文件的格式为“ .srt”和“ .mp4”。 由于某些特殊原因,当我开始从服务器下载那些文件时,我在文件末尾添加了数字。 例如,“ Intro.srt-1.1”和“ blabla720.mp4-1.1”。 并且数量在增加,分别为1.2、1.3、2.1、2.2、3.1、3.2等。

首先,我想将数字移到最前面,例如“ 1.1-Intro.srt”。 我已经设法将最后一个字符向右移动。

现在,我想重命名这些文件以将.srt与.mp4匹配,然后将它们移动到新文件夹中。 例如:我想将“ 1.1-blabla720.mp4”重命名为.srt文件的匹配编号,在本例中为“ 1.1-Intro.srt”,因此以后将为“ 1.1-Intro.mp4”。 然后将它们移动到新文件夹“阶段1”。 对于以数字2开头的文件,将被移动到新目录“ Stage 2”等。

我想在Java中执行此操作,当我运行Java文件时,它将重命名并移动该根目录中的所有文件。 (我已经知道如何递归地跟踪整个文件夹)。

所以我在想:

  1. 遍历.srt文件
  2. 获取该.srt文件的编号
  3. 搜索.mp4文件的匹配编号
  4. 重命名.mp4
  5. 根据第一个数字将这两个文件移动到目录中
  6. 循环回到第一

我该如何使用正则表达式?

我认为您应该首先关注将正确的.srt文件分配给正确的.mp4文件。 regex不会帮助您。

像这样的简单代码(未经测试的代码):

//get all files into a single array
File[] allFiles = getAListOfAllFilesRecursively("rootFolder");

//sort the files by their path (File is Comparable)
Arrays.sort(allFiles);

for (int x = 0; x < allFiles.length(); x++) {
    //if x ends with .srt, rename x+1 (the .mp4) based on the name we parse from x
    //otherwise, rename x (the .mp4) based on the name we parse from x+1
    if (allFiles[x].getName().endsWith(".srt")) {
        String name = getNameFromFileName(allFiles[x].getName());
        renameFileToName(allFiles[x+1], name);
    } else {
        String name = getNameFromFileName(allFiles[x+1].getName());
        renameFileToName(allFiles[x], name);
    }
}

您可能需要在这里和那里添加一些检查(如果您有一个.srt文件没有匹配的.mp4,则可能需要在重命名之前验证数字前缀是否确实匹配)。

getAListOfAllFilesRecursively(String rootFolder)需要返回一个递归检索的File对象数组,就像您提到的那样。 getNameFromFileName(File file)需要将1.1 - SomeName.srt解析为SomeName renameFileToName(File file, String name)需要将传入文件的文件名重命名为1.1 - abcd.mp41.1 - SomeName.mp4给定name参数的SomeName值(男人,有很多name-s :)))。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM