如何使用Java从目录中仅获取10个最后修改的文件?
我是初学者,我发现了一个关于java中最近修改的文件的老线索。 我想要的是从一个目录中只获取10个最近的文件,然后将它们移动到另一个目录 此论坛中的代码运行良好,但它从一个目录中获取所有文件并按日期排序 任何帮助都将受到感谢, 多谢各位 代码如下:如何使用Java从目录中仅获取10个最后修改的文件?,java,Java,我是初学者,我发现了一个关于java中最近修改的文件的老线索。 我想要的是从一个目录中只获取10个最近的文件,然后将它们移动到另一个目录 此论坛中的代码运行良好,但它从一个目录中获取所有文件并按日期排序 任何帮助都将受到感谢, 多谢各位 代码如下: import java.io.File; import java.util.Arrays; import java.util.Comparator; public class Newest { public static void mai
import java.io.File;
import java.util.Arrays;
import java.util.Comparator;
public class Newest {
public static void main(String[] args) {
File dir = new File("C:\\your\\dir");
File [] files = dir.listFiles();
Arrays.sort(files, new Comparator(){
public int compare(Object o1, Object o2) {
return compare( (File)o1, (File)o2);
}
private int compare( File f1, File f2){
long result = f2.lastModified() - f1.lastModified();
if( result > 0 ){
return 1;
} else if( result < 0 ){
return -1;
} else {
return 0;
}
}
});
System.out.println( Arrays.asList(files ));
}
}
导入java.io.File;
导入java.util.array;
导入java.util.Comparator;
公开课最新{
公共静态void main(字符串[]args){
文件目录=新文件(“C:\\your\\dir”);
File[]files=dir.listFiles();
Arrays.sort(文件,新的Comparator(){
公共整数比较(对象o1、对象o2){
返回比较((文件)o1,(文件)o2);
}
专用整数比较(文件f1、文件f2){
长结果=f2.lastModified()-f1.lastModified();
如果(结果>0){
返回1;
}否则如果(结果<0){
返回-1;
}否则{
返回0;
}
}
});
System.out.println(Arrays.asList(files));
}
}
我是新手,如果在论坛上犯了一些错误,我很抱歉 所以对我来说,我不知道如何在新代码中插入上述内容 如果我保留第一个代码,我想将10个最近的文件存储到另一个文件夹中, 我尝试了这个,但它将所有文件都放在目录中 需要帮忙吗 多谢各位
import java.io.File;
import java.util.Arrays;
import java.util.Comparator;
import java.io.*;
import java.text.*;
import java.util.*;
public class Newest
{
public static void main(String[] args)
{
File dir = new File("c:\\File");
File[] files = dir.listFiles();
Arrays.sort(files, new Comparator<File>()
{
public int compare(File f1, File f2)
{
return Long.valueOf(f2.lastModified()).compareTo
(
f1.lastModified());
}
});
//System.out.println(Arrays.asList(files));
for(int i=0, length=Math.min(files.length, 12); i<length; i++) {
System.out.println(files[i]);
for (File f : files) {
System.out.println(f.getName() + " " + sdf.format(new Date(f.lastModified())));
File dir = new File("c://Target");
boolean success = f.renameTo(new File(dir,f.getName()));
if (!success)
}
}
}
导入java.io.File;
导入java.util.array;
导入java.util.Comparator;
导入java.io.*;
导入java.text.*;
导入java.util.*;
公开课最新
{
公共静态void main(字符串[]args)
{
文件目录=新文件(“c:\\File”);
File[]files=dir.listFiles();
Arrays.sort(文件,新的Comparator()
{
公共整数比较(文件f1、文件f2)
{
返回Long.valueOf(f2.lastModified()).compareTo
(
f1.lastModified());
}
});
//System.out.println(Arrays.asList(files));
对于(inti=0,length=Math.min(files.length,12);在代码示例中,i更改:
System.out.println( Arrays.asList(files ));
致:
for(int i=0,length=Math.min(files.length,10);i操作系统在请求文件时不采用排序例程。因此,唯一的解决方案是抓取所有文件(以确保不会跳过所需文件之一)并自行排序
文件系统通常提供基于文件名抓取文件的例程,Java通过采用FileFilter
参数的列表(…)
公开了这一点
在Java1.7中(无论何时发布),有了新的面向文件的工具,您可以访问底层文件系统的抽象。有了这些工具,您可以创建一个文件访问者,但这对情况没有多大帮助,因为您不知道在不查看其修改时间的情况下可以跳过哪些文件。这意味着即使使用作为一个访问界面,您仍然需要检查每个文件的修改时间,以确保您没有错过所需的十个文件中的一个。获取所有文件,然后按照规范对其进行排序是唯一“正确”的方法。但这里有另一种方法,它使用文件过滤器作为访问者,并对e fly插入排序。在我的机器上,在一个包含2300个文件的目录(一个映像目录)上,性能大约提高了4倍
InsertionSortFilter的代码:
class SortFilter implements FileFilter {
final LinkedList<File> topFiles;
private final int n;
public SortFilter(int n) {
this.n = n;
topFiles = new LinkedList<File>();
}
public boolean accept(File newF) {
long newT = newF.lastModified();
if(topFiles.size()==0){
//list is empty, so we can add this one for sure
topFiles.add(newF);
} else {
int limit = topFiles.size()<n?topFiles.size():n;
//find a place to insert
int i=0;
while(i<limit && newT <= topFiles.get(i).lastModified())
i++;
if(i<limit){ //found
topFiles.add(i, newF);
if(topFiles.size()>n) //more than limit, so discard the last one. Maintain list at size n
topFiles.removeLast();
}
}
return false;
}
}
类SortFilter实现FileFilter{
最终LinkedList topFiles;
私人终审法院;
公共分拣过滤器(int n){
这个,n=n;
topFiles=newlinkedlist();
}
公共布尔接受(文件newF){
long newT=newF.lastModified();
如果(topFiles.size()==0){
//列表为空,因此我们可以确定添加此列表
topFiles.add(newF);
}否则{
int limit=topFiles.size()非常感谢您的回复。@user618111:不客气。如果您觉得这个答案有帮助,请选中左侧答案旁边的复选标记,将其标记为正确。导入java.io.File;导入java.util.array;导入java.util.Comparator;导入java.io.*;导入java.text.*;导入java.util.*;您好,我不知道如何在中插入您的代码我的,但如果保留第一个代码,我试图修改它以将最近的10个文件存储到一个文件夹中,但它会将每个文件都放入其中。下面是我修改的代码:
private File[] getTopFiles() {
File dir = new File("C:\\icons_svr");
SortFilter filter = new SortFilter(10);
dir.listFiles(filter);
File[] topFiles = new File[10];
return filter.topFiles.toArray(topFiles);
}
class SortFilter implements FileFilter {
final LinkedList<File> topFiles;
private final int n;
public SortFilter(int n) {
this.n = n;
topFiles = new LinkedList<File>();
}
public boolean accept(File newF) {
long newT = newF.lastModified();
if(topFiles.size()==0){
//list is empty, so we can add this one for sure
topFiles.add(newF);
} else {
int limit = topFiles.size()<n?topFiles.size():n;
//find a place to insert
int i=0;
while(i<limit && newT <= topFiles.get(i).lastModified())
i++;
if(i<limit){ //found
topFiles.add(i, newF);
if(topFiles.size()>n) //more than limit, so discard the last one. Maintain list at size n
topFiles.removeLast();
}
}
return false;
}
}