所以就是这样。
我有一个包含更多文件夹的根文件夹,每个文件夹都有一堆文件。 这些文件的格式为' .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文件时,它将重命名并移动根目录中的所有文件。 (我已经知道如何以递归方式跟踪整个文件夹。)
所以我在想:
如果我使用正则表达式,我该如何处理?
答案 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
解析为SomeName
。 renameFileToName(File file, String name)
需要将传递的文件重命名为1.1 - abcd.mp4
到1.1 - SomeName.mp4
的文件名,SomeName
参数的值为name
(man,有一个很多名字 - ):))。)。