java重命名一堆文件并将它们移动到一个新文件夹

时间:2015-01-07 22:44:33

标签: java regex

所以就是这样。

我有一个包含更多文件夹的根文件夹,每个文件夹都有一堆文件。 这些文件的格式为' .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开头的文件将被移动到新的目录'第2阶段'等

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

所以我在想:

  1. 遍历.srt文件
  2. 获取该.srt文件的编号
  3. 搜索.mp4文件的匹配数字
  4. 重命名.mp4
  5. 将这2个文件移动到目录中,具体取决于第一个数字
  6. 循环回到第1期
  7. 如果我使用正则表达式,我该如何处理?

2 个答案:

答案 0 :(得分:1)

我认为您应该首先关注将正确的.srt文件分配到正确的.mp4文件。正则表达式不会帮助你。

答案 1 :(得分:0)

如此简单的事情(未经测试的代码):

//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解析为SomeNamerenameFileToName(File file, String name)需要将传递的文件重命名为1.1 - abcd.mp41.1 - SomeName.mp4的文件名,SomeName参数的值为name(man,有一个很多名字 - ):))。)。