实际项目开发中,我们经常会遇到文件排序的需求,比如按照文件最后的修改时间读取文件内容,或者按照文件的大小对文件排序,或者按照文件名进行排序。有的时候,直接获取文件列表后,使用for循环,然后按照指定的条件进行排序也能搞定。但是,这样的=自己造轮子的方式,容易被人吐槽。下面介绍几种现有的轮子:
1:按 文件名称 排序
public static void orderByName(String filePath) {
File file = new File(filePath);
File[] files = file.listFiles();
List fileList = Arrays.asList(files);
Collections.sort(fileList, new Comparator<File>() {
@Override
public int compare(File o1, File o2) {
if (o1.isDirectory() && o2.isFile())
return -1;
if (o1.isFile() && o2.isDirectory())
return 1;
return o1.getName().compareTo(o2.getName());
}
});
for (File file1 : files) {
System.out.println(file1.getName());
}
}
这样就是按照递增的顺序排列了
2:按 文件日期 排序
按 文件修改日期:递增
public static void orderByDate(String filePath) {
File file = new File(filePath);
File[] files = file.listFiles();
Arrays.sort(files, new Comparator<File>() {
public int compare(File f1, File f2) {
long diff = f1.lastModified() - f2.lastModified();
if (diff > 0)
return 1;
else if (diff == 0)
return 0;
else
return -1;//如果 if 中修改为 返回-1 同时此处修改为返回 1 排序就会是递减
}
public boolean equals(Object obj) {
return true;
}
});
for (int i = 0; i < files.length; i++) {
System.out.println(files[i].getName());
System.out.println(new Date(files[i].lastModified()));
}
}
3:按 文件大小 排序
public static void orderByLength(String filePath) {
File file = new File(filePath);
File[] files = file.listFiles();
List<File> fileList = Arrays.asList(files);
Collections.sort(fileList, new Comparator<File>() {
public int compare(File f1, File f2) {
long diff = f1.length() - f2.length();
if (diff > 0)
return 1;
else if (diff == 0)
return 0;
else
return -1;//如果 if 中修改为 返回-1 同时此处修改为返回 1 排序就会是递减
}
public boolean equals(Object obj) {
return true;
}
});
for (File file1 : files) {
if (file1.isDirectory()) continue;
System.out.println(file1.getName() + ":" + file1.length());
}
}
现有的轮子,固然好用,自己造轮子的过程还是不能省的。自己造了轮子后,才能知道那个轮子好用不是?
欢迎关注公众号:壹家大数据