2015-01-07 4 views
0

Итак, вот так.java переименовать кучу файлов и переместить их в новую папку

У меня есть одна корневая папка, которая содержит больше папок, и каждая из этих папок имеет кучу файлов. Эти файлы отформатированы '.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. Переместить эти 2 файла в каталог в зависимости от первого номера
  6. Петля назад к № 1

Как подойти к этому, следует ли использовать регулярное выражение?

+0

Я бы порекомендовал сначала перемещать файлы. Им будет легче попасть в нужное место, если вам тоже не нужно менять имя в памяти. –

ответ

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 (человек, есть много названий :))).

1

Я думаю, что сначала вы должны сфокусироваться на выделении правого .srt файла вправо .mp4-файла. regex вам не поможет.

+0

Вот почему я добавил числа в начале файла. –

+0

ohh, вы можете просто использовать .contains() для этого и перебрать список имен. – blipman17

+0

А, thx, я попробую сначала. –

Смежные вопросы