在 java 的文件夹中重命名前 2 个最新的 pdf

Rename top 2 latest pdf in a folder in java

我需要在java中写一个函数,可以实现一些简单的功能

这是我尝试过的方法:

    File dir = new File("C:\Users\sharm\Downloads\");
    File[] files = dir.listFiles(new FilenameFilter() {
        public boolean accept(File dir, String name) {
            return name.endsWith(".pdf");
        }});
    
    Arrays.sort(files, new Comparator<File>(){
      public int compare(File f1, File f2) {
        return Long.valueOf(f2.lastModified()).compareTo(f1.lastModified());
      } 
    });
                
    String filenames = Arrays.toString(files);
    filenames = filenames.substring(1, filenames.length() - 1);
    String[] arrOfStr = filenames.split( "," , 3);
    File file = new File(arrOfStr[0]);
    File file2 = new File("Outbound.pdf");
    file.renameTo(file2);
    String secondFileName = arrOfStr[1];
    secondFileName.trim();
    StringBuilder sb = new StringBuilder(secondFileName);
    sb.deleteCharAt(0);
    File file3 = new File(sb.toString());
    File file4 = new File("Inbound.pdf");
    file3.renameTo(file4);

当我对第二个文件名执行sysout 时发现开头有一个space。因此我决定使用 sb 消除 space。但总而言之,第一个文件名更改成功但第二个更改没有发生。而他们都基于相同的原理并使用相同的 renameTo 方法。有什么东西只能在代码中使用一次吗? 有人可以帮忙吗?我为此绞尽脑汁一整天。

我认为没有必要将列表转换为字符串并将其解析回文件。通过重命名索引获得第一和第二应该可行:

// after your filtering / sorting code

File firstFile = files.get(0);
File secondFile = files.get(1);'

firstFile.renameTo(new File("Outbound.pdf"));
secondFile.renameTo(new File("Inbound.pdf"));

试试这个。

File dir = new File("C:\Users\sharm\Downloads\");
File[] files = dir.listFiles((d, name) -> name.endsWith(".pdf"));
Arrays.sort(files, Comparator.comparing((File f) -> f.lastModified()).reversed());
files[0].renameTo(new File(dir, "Outbound.pdf"));
files[1].renameTo(new File(dir, "Inbound.pdf"));