Как использовать разные префиксы при переименовании нескольких файлов в Java?

1

Я пытаюсь создать приложение Java (с swing), которое переименовывает pdf файлы с установленным соглашением об именах. В настоящее время файлы называются:

1.pdf, 2.pdf...... 10.pdf, 11.pdf...... 20.pdf, 21.pdf etc.

Поэтому я решил добавить префикс (ABC_0) к имени файла. Новые имена файлов должны быть:

ABC_01.pdf, ABC_02.pdf.... ABC_10.pdf, ABC_11.pdf...... ABC_20.pdf, ABC_21.pdf etc.

Пока все работает хорошо. Единственная проблема, с которой я столкнулся, заключается в том, что когда префикс добавляется к имени файла PDF с номером 10 и выше, он переименовывается как:

ABC_010.pdf, ABC_011.pdf...... ABC_020.pdf, ABC_021.pdf etc.

Это не верно. 0 следует добавлять только в имена файлов PDF с номером 1-9.

Не могли бы вы мне помочь?

Это код, с которым мне нужна помощь.

        {
            String dir= txt_src.getText();
            String addPrefix= "ABC_0";
            File dirFile,dirFile1;
            File oldfile, newfile;
            String newname;
            String filenames[];
            int i, count;
            dirFile = new File(dir);
            if (!dirFile.exists() || !dirFile.isDirectory()) 
            {
                message("File not exist or not a directory");
            }
            filenames = dirFile.list();
            for(i = count = 0; i < filenames.length; i++) 
            {
                if (filenames[i].equals(".")) continue; 
                if (filenames[i].equals("..")) continue;
                dirFile1 = new File(dir+"\\"+filenames[i]); 
                if (!dirFile1.isDirectory())
                {oldfile = new File(dirFile, filenames[i]); 
                    newname = addPrefix + filenames[i]; 
                    newfile = new File(dirFile, newname); 
                    message("Files Renamed Successfully");
                    if (oldfile.renameTo(newfile)) count++; 
                    else 
                    {
                        message("Unable to rename " + oldfile);
                    }
                }
            }
        }
Теги:
directory
pdf
file-rename
prefix

4 ответа

0
Лучший ответ

Вы можете убедиться, что ваши имена файлов дополнены нулями:

public String pad(String fileName, int len) {
  if (fileName.length() >= len) {
    return fileName;
  }
  String padded = "0000000" + fileName;  // Change the number of zeros to your needs
  return  padded.substring(padded.length() - len); 
}

Затем вам просто нужно добавить "ABC_" к дополненному значению:

String newName = "ABC_" + pad(oldNmame, 6); // produce 6 characters per String

дает результаты, такие как:

10.pdf gets ABC_10.pdf
1.pdf gets ABC_01.pdf
a.pdf gets ABC_0a.pdf
100.pdf gets ABC_100.pdf
a.a gets ABC_000a.a
  • 0
    эй, большое спасибо, я попробовал этот код, и он работал отлично. Я просто хотел спросить вас, как это работает, и для чего «6»?
  • 0
    @ user3566271 6 - это просто минимальная длина строки, созданной функцией pad. Если имя файла уже достаточно долго, я возвращаю его без изменений. Если нет, я добавляю достаточно 0 и возвращаю последние 6 символов. Так что, если у вас будет 1000.pdf, просто используйте 8, и все будет иметь одинаковую длину.
0

Проверьте мою маленькую программу. Он считывает номер перед расширением ".pdf". Если число имеет длину 1, добавьте 0 перед добавлением префикса.

String pdfNames[] = new String[] { "2.pdf", "6.pdf", "19.pdf", "26.pdf" };
String newNames[] = new String[pdfNames.length];
String prefix = "ABC_";
for (int i = 0; i < pdfNames.length; i++) {
    String name = pdfNames[i].split(".pdf")[0];
    System.out.println(name);

    newNames[i] = prefix;

    if (name.length() == 1)
        newNames[i] += "0";

    newNames[i] += name;
    System.out.println(newNames[i]);
}

Но подумайте о том, что у вас есть файлы с именами 123, 1234 и т.д. Затем вам нужно добавить более одного 0.

РЕДАКТИРОВАТЬ

В вашем коде

filenames = dirFile.list();
for(i = count = 0; i < filenames.length; i++) 
{
    ...

вы сначала заполняете filenames массива String списком имен файлов ;-)

В цикле for вы можете получить длину имени файла по filenames[i].split(".pdf")[0].length().

  • 0
    эй спасибо, я попробовал это, проблема в том, что я не могу получить длину имени файла, как я делаю со строкой, а также я не знаю, как преобразовать имя файла в строку, я даже не знаю, если это возможно.
  • 0
    @ user3566271 Проверьте мои изменения
0

Я бы просто создал две различные строковые переменные и разрешил им выбирать. Проверьте, если число меньше 10, если оно есть, используйте строку с 0 ABC_0

Если оно больше 10, используйте строку без 0 ABC_

  • 0
    это то, что я планировал сделать, но я не знаю как. Не могли бы вы помочь мне с кодом того, как действовать.
0

удалить 0 из addPrefix

String addPrefix= "ABC_0";

использовать это

String addPrefix= "ABC_";

обновил эту строку

 newname = addPrefix+i + filenames[i]; 
  • 0
    Эй, спасибо большое, но это не сработало, оно все равно дает мне «0» перед двузначным числом.
  • 0
    @ user3566271 Должно работать, в этом случае двухзначное число, которое дает вам «0»

Ещё вопросы

Сообщество Overcoder
Наверх
Меню