Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何根据名称、大小和上次修改对目录列表进行排序?_Java_File_Sorting_Directory_Directory Listing - Fatal编程技术网

Java 如何根据名称、大小和上次修改对目录列表进行排序?

Java 如何根据名称、大小和上次修改对目录列表进行排序?,java,file,sorting,directory,directory-listing,Java,File,Sorting,Directory,Directory Listing,我只是想弄清楚如何根据目录的名称、上次修改的时间和大小对目录列表进行排序。我知道你可以访问文件的名称,大小,最后修改的文件方法,但我不知道如何进行排序。如果有人能给我指出正确的方向,那就太好了 public void printDirectoryContents(String path, PrintWriter writer) { File[] list = root.listFiles(); Arrays.sort(list); for ( File f : list

我只是想弄清楚如何根据目录的名称、上次修改的时间和大小对目录列表进行排序。我知道你可以访问文件的名称,大小,最后修改的文件方法,但我不知道如何进行排序。如果有人能给我指出正确的方向,那就太好了

public void printDirectoryContents(String path, PrintWriter writer)
{
    File[] list = root.listFiles();
    Arrays.sort(list);

    for ( File f : list )
    {           
        String name = f.getName();
        long lastmod = f.lastModified();
        SimpleDateFormat simple = new SimpleDateFormat("dd-MMM-yyyy HH:mm");
        String formatted = simple.format(new Date(lastmod));
        long length = f.length();

    }
}
您应该实现一个函数来根据您提到的属性对文件进行排序,并将其作为参数传递给该方法

Arrays.sort(列表,新的比较器()
{
公共int比较(文件file1、文件file2)
{
int结果=。。。
…比较逻辑
返回结果;
}
});
您应该实现一个函数,根据您提到的属性对文件进行排序,并将其作为参数传递给该方法

Arrays.sort(列表,新的比较器()
{
公共int比较(文件file1、文件file2)
{
int结果=。。。
…比较逻辑
返回结果;
}
});

为每个排序需要创建一个
比较器。然后使用该
比较器对特定
集合中的文件对象进行排序

您可以在此处查看更多示例:


为每个排序需求创建一个
比较器。然后使用该
比较器对特定
集合中的文件对象进行排序

您可以在此处查看更多示例:


而不是
数组。排序(列表)考虑使用这样的东西:

    Arrays.sort(list, new Comparator<File>() {
        @Override
        public int compare(File file1, File file2) {
            //your comparison logic
            return <your_return_value>;
        }

    });
Arrays.sort(列表,新的比较器(){
@凌驾
公共int比较(文件file1、文件file2){
//你的比较逻辑
返回;
}
});

然后,您可以根据文件名、日期和大小在
compare(…)
方法中编写比较逻辑,而不是
Arrays.sort(list)考虑使用这样的东西:

    Arrays.sort(list, new Comparator<File>() {
        @Override
        public int compare(File file1, File file2) {
            //your comparison logic
            return <your_return_value>;
        }

    });
Arrays.sort(列表,新的比较器(){
@凌驾
公共int比较(文件file1、文件file2){
//你的比较逻辑
返回;
}
});

然后,您可以在
compare(…)
方法中根据文件名、日期和大小编写比较逻辑。您可以编写自己的比较器

public class FileComparator implements Comparator<File> {

    //This should sort first by name then last-modified and then size
    public int compare(File f1, File f2) {
        int nameComparisonResult = o1.getName().compareTo(o2.getName());
        if(nameComparisonResult != 0) return nameComparisonResult;
        int lModCompResult = Long.valueOf(o1.lastModified()).compareTo(Long.valueOf(o2.lastModified()));
        if(lModCompResult != 0) return lModCompResult;      
        return Long.valueOf(o1.getTotalSpace()).compareTo(Long.valueOf(o2.getTotalSpace()));
    }
}
公共类FileComparator实现Comparator{
//这应该首先按名称排序,然后按最后修改的名称排序,然后按大小排序
公共整数比较(文件f1、文件f2){
int-nameComparisonResult=o1.getName().compareTo(o2.getName());
如果(nameComparisonResult!=0)返回nameComparisonResult;
int-lModCompResult=Long.valueOf(o1.lastModified()).compareTo(Long.valueOf(o2.lastModified());
如果(lModCompResult!=0)返回lModCompResult;
返回Long.valueOf(o1.getTotalSpace()).compareTo(Long.valueOf(o2.getTotalSpace());
}
}

并使用它对数组进行排序
Arrays.sort(list,newfilecomparator())

您可以编写自己的比较器

public class FileComparator implements Comparator<File> {

    //This should sort first by name then last-modified and then size
    public int compare(File f1, File f2) {
        int nameComparisonResult = o1.getName().compareTo(o2.getName());
        if(nameComparisonResult != 0) return nameComparisonResult;
        int lModCompResult = Long.valueOf(o1.lastModified()).compareTo(Long.valueOf(o2.lastModified()));
        if(lModCompResult != 0) return lModCompResult;      
        return Long.valueOf(o1.getTotalSpace()).compareTo(Long.valueOf(o2.getTotalSpace()));
    }
}
公共类FileComparator实现Comparator{
//这应该首先按名称排序,然后按最后修改的名称排序,然后按大小排序
公共整数比较(文件f1、文件f2){
int-nameComparisonResult=o1.getName().compareTo(o2.getName());
如果(nameComparisonResult!=0)返回nameComparisonResult;
int-lModCompResult=Long.valueOf(o1.lastModified()).compareTo(Long.valueOf(o2.lastModified());
如果(lModCompResult!=0)返回lModCompResult;
返回Long.valueOf(o1.getTotalSpace()).compareTo(Long.valueOf(o2.getTotalSpace());
}
}
并使用它对数组进行排序
Arrays.sort(list,newfilecomparator())

看一看

您可以找到满足所有需求的比较器

有关用法,请参见:

看一看

您可以找到满足所有需求的比较器

有关用法,请参见:


此类将向您展示可比较接口的实现,并使用Collections.sort方法根据文件名对列表进行排序

package com.roka.tgpl.sms;



  import java.util.ArrayList;
  import java.util.Calendar;
  import java.util.Collections;

  import java.util.Date;
  import java.util.List;




  public class MyFile implements Comparable<MyFile> {

     private String name;
     private Date lastModified;
     private int size;

     MyFile(String name,Date lastModified,int size){
         this.name = name;
         this.lastModified =lastModified;
         this.size = size;
     }
     /**
    * @return the name
    */
    public String getName() {
       return name;
   }


   /**
    * @param name the name to set
    */
   public void setName(String name) {
       this.name = name;
   }


   /**
    * @return the lastModified
    */
   public Date getLastModified() {
    return lastModified;
   }


   /**
    * @param lastModified the lastModified to set
    */
   public void setLastModified(Date lastModified) {
       this.lastModified = lastModified;
   }


    /**
     * @return the size
    */
   public int getSize() {
        return size;
   }


   /**
    * @param size the size to set
    */
   public void setSize(int size) {
    this.size = size;
   }


   public int compareTo(MyFile o) {

         int compare = this.name.compareTo(o.getName());

       return compare;
    }



    public static void main(String arg []) {

       List<MyFile> fileList = new ArrayList<MyFile>();
       fileList.add(new MyFile("DCB", Calendar.getInstance().getTime(), 5));
       fileList.add(new MyFile("ABC", Calendar.getInstance().getTime(), 15));
        Collections.sort(fileList);

       for(MyFile file : fileList){
            System.out.println(file.getName());
           }

      }

    }
package com.roka.tgpl.sms;
导入java.util.ArrayList;
导入java.util.Calendar;
导入java.util.Collections;
导入java.util.Date;
导入java.util.List;
公共类MyFile实现了可比较的{
私有字符串名称;
上次修改的私人日期;
私有整数大小;
MyFile(字符串名称、上次修改日期、整数大小){
this.name=名称;
this.lastModified=lastModified;
这个。大小=大小;
}
/**
*@返回名称
*/
公共字符串getName(){
返回名称;
}
/**
*@param name要设置的名称
*/
公共void集合名(字符串名){
this.name=名称;
}
/**
*@返回上次修改的
*/
公共日期getLastModified(){
返回最后修改;
}
/**
*@param lastModified将lastModified设置为
*/
公共作废setLastModified(日期lastModified){
this.lastModified=lastModified;
}
/**
*@返回大小
*/
公共int getSize(){
返回大小;
}
/**
*@param size要设置的大小
*/
公共无效设置大小(整型大小){
这个。大小=大小;
}
公共整数比较(MyO文件){
int compare=this.name.compareTo(o.getName());
返回比较;
}
公共静态void main(字符串arg[]){
List fileList=new ArrayList();
添加(新的MyFile(“DCB”,Calendar.getInstance().getTime(),5));
添加(新的MyFile(“ABC”,Calendar.getInstance().getTime(),15));
Collections.sort(文件列表);
用于(MyFile文件:文件列表){
System.out.println(file.getName());
}
}
}

此类将向您展示可比较接口的实现,并使用Collections.sort根据文件名对列表进行排序