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根据文件名对列表进行排序