Я пытаюсь создать приложение 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);
}
}
}
}
Вы можете убедиться, что ваши имена файлов дополнены нулями:
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
Проверьте мою маленькую программу. Он считывает номер перед расширением ".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()
.
Я бы просто создал две различные строковые переменные и разрешил им выбирать. Проверьте, если число меньше 10, если оно есть, используйте строку с 0 ABC_0
Если оно больше 10, используйте строку без 0 ABC_
удалить 0 из addPrefix
String addPrefix= "ABC_0";
использовать это
String addPrefix= "ABC_";
обновил эту строку
newname = addPrefix+i + filenames[i];