情况就是这样。
我有一个根文件夹,它包含更多的文件夹,每个文件夹都有很多文件。这些文件被格式化为'.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开头的文件,将移到新的dir‘第2阶段’等。
我想在Java中这样做,当我运行java文件时,它将重命名并移动根dir中的所有文件。(我已经知道如何递归地跟踪整个文件夹)。
所以我在想:
如何处理这个问题,我应该使用regex吗?
发布于 2015-01-08 02:24:17
像这样简单的代码(未经测试的代码)怎么样:
//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文件)。
getAListOfAllFilesRecursively(String rootFolder)需要像前面提到的那样返回递归检索的文件对象数组。getNameFromFileName(File file)需要将1.1 - SomeName.srt解析为SomeName。renameFileToName(File file, String name)需要用像1.1 - abcd.mp4这样的文件名将传入的文件重命名为1.1 - SomeName.mp4,为name参数提供SomeName的值(man,有很多名称-s:)。
发布于 2015-01-07 22:51:10
我认为您应该首先将正确的.srt文件分配给正确的.mp4文件。雷吉斯帮不了你。
https://stackoverflow.com/questions/27830016
复制相似问题