以下Java代码重命名文件,但不会按照我希望的方式重命名。我希望重命名文件从目录开始到每个“部分”数字的末尾(不是在特定目录中添加它的时间),但它没有这样做。是否可以进行“if”检查,例如:if filename.contains(j)
然后处理这个?
import java.io.File;
public class RenameFile2 {
public static void main(String[] args) {
String absolutePath1 = "1 to 4";
String absolutePath2 = "6 to 9";
String absolutePath3 = "10 to 99";
String absolutePath4 = "100 to 224";
File dir1 = new File(absolutePath1);
File dir2 = new File(absolutePath2);
File dir3 = new File(absolutePath3);
File dir4 = new File(absolutePath4);
File[] filesInDir1 = dir1.listFiles();
File[] filesInDir2 = dir2.listFiles();
File[] filesInDir3 = dir3.listFiles();
File[] filesInDir4 = dir4.listFiles();
int i1 = 1;
for(File file:filesInDir1) {
String name = file.getName();
String newName = "550 00510 00" + i1 + ".pdf";
String newPath = absolutePath1 + "\\" + newName;
file.renameTo(new File(newPath));
System.out.println(name + " changed to " + newName);
i1++;
}
int i2 = 6;
for(File file:filesInDir2) {
String name = file.getName();
String newName = "550 00510 00" + i2 + ".pdf";
String newPath = absolutePath2 + "\\" + newName;
file.renameTo(new File(newPath));
System.out.println(name + " changed to " + newName);
i2++;
}
int i3 = 10;
for(File file:filesInDir3) {
String name = file.getName();
String newName = "550 00510 0" + i3 + ".pdf";
String newPath = absolutePath3 + "\\" + newName;
file.renameTo(new File(newPath));
System.out.println(name + " changed to " + newName);
i3++;
}
int i4 = 100;
//int j = 99;
for(File file:filesInDir4) {
String name = file.getName();
/* if(name.contains(j))
{
}
*/
String newName = "550 00510 " + i4 + ".pdf";
String newPath = absolutePath4 + "\\" + newName;
file.renameTo(new File(newPath));
System.out.println(name + " changed to " + newName);
i4++;
}
}
}
答案 0 :(得分:0)
您需要在列出文件后对文件进行排序,listFiles()
不保证任何订单。
File[] filesInDir1 = dir1.listFiles();
Arrays.sort(filesInDir1);
您可能需要实施Comparator
并致电Arrays.sort(filesList, comparator)
,以便对其进行自定义排序。
按文件排序后,您可以根据需要应用重命名逻辑。
另一项改进是,如果您只想列出带有图案的文件,您可以在列出时进行过滤。
final String pattern = "regexpattern";
dir1.listFiles(new FilenameFilter(){
public boolean accept( File dir, String name ) {
return name.matches( pattern );
}
});
答案 1 :(得分:0)
在documentation for .listFiles()
中,它说:
无法保证结果数组中的名称字符串将以任何特定顺序出现;特别是,它们不保证按字母顺序出现。
您需要按照要按特定顺序处理数组的顺序对数组进行排序。
补充说明和建议:
String.contains()
将String
作为参数,而不是int
。您已在问题中注释掉此代码。File newPath = new File(dir1, newName);