Java 如何根据上次修改的文件按asc顺序对文件进行排序
我从一个目录中获取所有文件,然后根据需要从中拾取文件,并将它们存储在一个数组中。现在,我想用last modified last对这些文件进行排序。这是我正在使用的代码Java 如何根据上次修改的文件按asc顺序对文件进行排序,java,Java,我从一个目录中获取所有文件,然后根据需要从中拾取文件,并将它们存储在一个数组中。现在,我想用last modified last对这些文件进行排序。这是我正在使用的代码 public static int GetFilesCount(File folderPath,int count,String type,Context context) { BackupCount=count; BackupFolderPath=folderPath; Backuptype=type;
public static int GetFilesCount(File folderPath,int count,String type,Context context)
{
BackupCount=count;
BackupFolderPath=folderPath;
Backuptype=type;
con=context;
DatabaseHandler objhandler;
Cursor cursor=null;
int total = 0;
String ext="";
// Check files count set by user
File[] fList = folderPath.listFiles();
ArrayList<String> myfiles = new ArrayList<String>();
for (File file : fList){
if (file.isFile()){
try {
String FileName=file.getName();
ext=GetFileExtension(FileName);
if(ext.equals("db"))
{
objhandler=new DatabaseHandler(context, folderPath+File.separator+FileName, null);
database= objhandler.openDataBase();
String selectQuery = "SELECT * FROM "+ type + " LIMIT 1";
cursor = database.rawQuery(selectQuery, null);
Integer ColCount=cursor.getColumnCount();
if(cursor.getCount()>0)
{
if(Backuptype.equals("SMS"))
{
if(ColCount.equals(9))
{
myfiles.add(FileName);
total++;
}
}
else if(Backuptype.equals("CallLogs"))
{
if(ColCount.equals(6))
{
myfiles.add(FileName);
total++;
}
}
else if(Backuptype.equals("Contacts"))
{
if(ColCount.equals(9))
{
myfiles.add(FileName);
total++;
}
}
}
if(total>count)
{
// String[] listFiles=new String[myfiles.size()];
// listFiles = myfiles.toArray(listFiles);
// File[] f = null;
for(int i=0;i<=myfiles.size();i++)
{
// f[i]=new File(folderPath+File.separator+myfiles.get(i));
System.out.println("Total SMS Files: "+myfiles.size());
System.out.println("file in folder: "+myfiles.get(i).toString());
}
/*Arrays.sort(f, new Comparator<File>(){
public int compare(File f1, File f2)
{
return Long.valueOf(f1.lastModified()).compareTo(f2.lastModified());
} });*/
System.out.println("file in folder: "+myfiles.size());
// Deletefile(folderPath+File.separator+myfiles.get(0));
}
}
}catch (Exception e) {
e.printStackTrace();
// TODO: handle exception
}finally{
cursor.close();
database.close();
}
}
}
return 1;
}
public static int getfilescont(文件文件夹路径、int计数、字符串类型、上下文)
{
备份计数=计数;
BackupFolderPath=folderPath;
备份类型=类型;
con=上下文;
数据库处理程序objhandler;
游标=空;
int-total=0;
字符串ext=“”;
//检查用户设置的文件数
文件[]fList=folderPath.listFiles();
ArrayList myfiles=新建ArrayList();
for(文件:fList){
if(file.isFile()){
试一试{
字符串文件名=file.getName();
ext=GetFileExtension(文件名);
如果(ext.equals(“db”))
{
objhandler=newdatabasehandler(上下文,folderPath+File.separator+FileName,null);
database=objhandler.openDataBase();
String selectQuery=“SELECT*FROM”+type+“LIMIT 1”;
cursor=database.rawQuery(selectQuery,null);
整数ColCount=cursor.getColumnCount();
if(cursor.getCount()>0)
{
if(Backuptype.equals(“SMS”))
{
if(ColCount.equals(9))
{
添加(文件名);
总计++;
}
}
else if(Backuptype.equals(“调用日志”))
{
if(ColCount.equals(6))
{
添加(文件名);
总计++;
}
}
else if(Backuptype.equals(“联系人”))
{
if(ColCount.equals(9))
{
添加(文件名);
总计++;
}
}
}
如果(总数>计数)
{
//String[]listFiles=新字符串[myfiles.size()];
//listFiles=myfiles.toArray(listFiles);
//文件[]f=null;
对于(int i=0;i请尝试将这部分代码合并到您的代码中:
final List<File> files = new ArrayList<File>();
Collections.sort(files, new Comparator<File>()
{
@Override
public int compare(final File o1, final File o2)
{
return o1.lastModified() >= o2.lastModified() ? 1 : -1;
}
});
final List files=new ArrayList();
Collections.sort(文件、新比较器()
{
@凌驾
公共整数比较(最终文件o1,最终文件o2)
{
返回o1.lastModified()>=o2.lastModified()?1:-1;
}
});
根据您的评论:
我不知道如何将所选文件放入文件[]
既然你已经:
// File[] f = null;
我想这就是你缺少的部分
File[] f = new File[myfiles.size()]; // init the array which should hold the files
for(int i = 0; i < myfiles.size(); i++) {
files[i] = new File(folderPath+File.separator+myfiles.get(i));
}
File[]f=new File[myfiles.size()];//初始化应该保存文件的数组
对于(int i=0;i
那么你可以用这个方法
Arrays.sort(文件,新比较器(){
@凌驾
公共整数比较(文件o1、文件o2){
返回Long.valueOf(o1.lastModified()).compareTo(o2.lastModified());
}
});
更好的是,您应该使用
listf=newarraylist();
对于(int i=0;i
没有必要发布这么多代码。唯一有趣的部分是隐藏在底部(尝试排序时的注释部分)。请解释为什么这对您不起作用-您收到错误了吗?@DuncanJones Array.sort()接受文件数组参数和比较器对象我不知道如何将所选文件放入文件[]您应该使用File[]flisty您可以将myfiles
更改为List
,然后使用Collections.sort()
int c=o1.lastModified()-o2.lastModified();返回c<0?-1:c>0?1:0;
仍然不那么棘手。我想您在这里遗漏了一些东西“List f=new ArrayList()”@supret如果您使用的是java 1.6或更低版本,那么您必须为java 1.7编写List f=new ArrayList();
List f=new ArrayList();
是正确的。这就是你的意思吗?我已经实现了代码段,但这不是对files@Supreet实际上,这应该是可行的,在您的代码中,您发现字段没有被排序?请在排序调用后立即打印它们,或者在其他地方?据我所知,您使用的方法只返回一个int
.C你是否编辑了你的问题并输入了相关代码?
Arrays.sort(files, new Comparator<File>() {
@Override
public int compare(File o1, File o2) {
return Long.valueOf(o1.lastModified()).compareTo(o2.lastModified());
}
});
List<File> f = new ArrayList<>();
for(int i = 0; i < myfiles.size(); i++) {
f.add(new File(folderPath+File.separator+myfiles.get(i)));
}
Collections.sort(f, new Comparator<File>() {
@Override
public int compare(File o1, File o2) {
return Long.valueOf(o1.lastModified()).compareTo(o2.lastModified());
}
});