所以是这种情况。
我有一个包含更多文件夹的根文件夹,并且每个文件夹都有一堆文件。这些文件的格式为“ .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文件时,它将重命名并移动该根目录中的所有文件。(我已经知道如何递归地跟踪整个文件夹)。
所以我在想:
我该如何使用正则表达式?
像这样的简单代码(未经测试的代码):
//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.mp4
到1.1 - SomeName.mp4
给定的值SomeName
的name
参数(男人,也有很多的名字-S :)))。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句