Java 如何根据上次修改的文件按asc顺序对文件进行排序

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;

我从一个目录中获取所有文件,然后根据需要从中拾取文件,并将它们存储在一个数组中。现在,我想用last modified last对这些文件进行排序。这是我正在使用的代码

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());
    }
});