在 java 的文件夹中重命名前 2 个最新的 pdf
Rename top 2 latest pdf in a folder in java
我需要在java中写一个函数,可以实现一些简单的功能
- 获取文件夹中前 2 个最新“pdf”的名称
- 将这些 pdf 分别重命名为 first 和 second。
这是我尝试过的方法:
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"));
我需要在java中写一个函数,可以实现一些简单的功能
- 获取文件夹中前 2 个最新“pdf”的名称
- 将这些 pdf 分别重命名为 first 和 second。
这是我尝试过的方法:
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"));