import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
public class Test_03 {
public static void main(String[] args) throws IOException{
/*
* 练习3
* 查看d盘中所有的文件和文件夹名称 按照文件大小排序 从大到小
* 排序输出到控制台
* 并将 结果 保存到一个文本文件中
* 格式要求
* 1.文件a = 1024kb
* 2.文件b = 200kb
* 3.文件d = 180kb
* 4.文件夹c = 10kb
**/
List<File> list = getAllFiles("d:"+File.separator+"aa"); //File.separator 是分隔符也就是\的转义字符"\\"程序中文件路径用到
//使用Collections工具类 传入list集合 和 比较器 进行比较排序
Collections.sort(list,new Comparator<File>() {
@Override
public int compare(File o1, File o2) { //从大到小
if(o1.length()>o2.length()){
return -1;
}else if(o1.length() == o2.length()){
return 0;
}
return 1;
}
});
//遍历集合 打印数据
for(File file : list){
System.out.println(file.getName()+"=="+file.length());
}
//创建字符写出流缓冲区 遍历集合 将集合中的内容 写出到test_03.txt中 使用转换流 设置编码集
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File("test_03.txt")),"gbk"));
Iterator<File> it = list.iterator();
while(it.hasNext()){
File f = it.next();
bw.write(f.getName()+"="+f.length());
bw.newLine();
bw.flush();
}
bw.close();
}
public static List<File> getAllFiles(String fileName){
List<File> files = new ArrayList<>(); //创建一个装文件对象的List集合
File file = new File(fileName); //创建文件对象
if(file.exists() && file.isDirectory()){ //如果文件对象存在,并且是文件夹
findAllFiles(file,files); //找到所有的文件
}
return files;
}
//递归获取目录下所有的文件
public static void findAllFiles(File file,List<File> files){
File[] filesAll = file.listFiles(); //
if(filesAll == null){
return;
}
for(File f: filesAll){
files.add(f);
findAllFiles(f, files);
}
}
}
假如用ArrayList来对自定义对象进行排序时,可以使用Collections工具类的sort方法,传入list集合 和 比较器 进行比较排序
数组的工具类Arrays也有对应的方法sort,传入数组 和 比较器 进行比较排序