Java:重命名文件 - 不正确地重命名文件

时间:2015-09-23 18:50:55

标签: java file-rename

以下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++;
            }
        }
    }

2 个答案:

答案 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的构造函数生成新路径而不是字符串连接:File newPath = new File(dir1, newName);