找出10个最大的文件并排序

来源:互联网 发布:算法设计与分析第五章 编辑:程序博客网 时间:2024/05/22 06:13
当磁盘空间不够的时候,我们需要删除一些比较大的文件。如何找到这些大文件呢?下面的代码能够帮你实现
import java.io.File;import java.util.ArrayList;import java.util.Collections;import java.util.List;public class FindTop10File {private static final double _1MB = 1024 * 1024;private static final double _50MB = 1024 * 1024 * 50;private static final String ROOT_DIR = "C:\\";private static List<WrapFile> list = new ArrayList<WrapFile>();public static void listFile(File f) {if (f != null && f.exists()) {if (f.isDirectory()) {File[] file = f.listFiles();for (File ff : file) {listFile(ff);}} else if (f.isFile()) {if (f.length() >= _50MB) { // 如果文件大于50MWrapFile wrapFile = new WrapFile(f, f.length());list.add(wrapFile);}}}}public static void main(String[] args) {File file = new File(ROOT_DIR);listFile(file);Collections.sort(list, new WrapFileComparator());// 按文件大小排序int size = list.size() < 10 ? list.size() : 10;for (int i = 0; i < size; i++) {System.out.println(list.get(i).getFile().getAbsolutePath());System.out.println(list.get(i).getLength() / _1MB + "MB");}}}
import java.io.File;public class WrapFile {File file;long length;public File getFile() {return file;}public void setFile(File file) {this.file = file;}public long getLength() {return length;}public void setLength(long length) {this.length = length;}public WrapFile(File file, long length) {super();this.file = file;this.length = length;}@Overridepublic int hashCode() {final int prime = 31;int result = 1;result = prime * result + ((file == null) ? 0 : file.hashCode());result = prime * result + (int) (length ^ (length >>> 32));return result;}@Overridepublic boolean equals(Object obj) {if (this == obj)return true;if (obj == null)return false;if (getClass() != obj.getClass())return false;WrapFile other = (WrapFile) obj;if (file == null) {if (other.file != null)return false;} else if (!file.equals(other.file))return false;if (length != other.length)return false;return true;}}

import java.util.Comparator;public class WrapFileComparator implements Comparator {@Overridepublic int compare(Object o1, Object o2) {return (int) (((WrapFile) o2).getLength() - ((WrapFile) o1).getLength());}}