获取D盘下的所有.txt文件,并按照文件大小排列输出
示例代码如下。
public class Test {
public static void main(String[] args) throws IOException {
File dir = new File("D:/");
List<File> files = Arrays.stream(dir.listFiles(file -> file.isFile() && file.getName().endsWith(".txt")))
.sorted((o1, o2) -> (int) (o2.length() - o1.length())).collect(Collectors.toList());
files.forEach(item -> System.out.printf("name:%s,size:%s\n", item.getName(), item.length()));
}
}
先塞进list再排序,或者treemap也可以
private static ArrayList<FileInfo> func(File file, ArrayList<FileInfo> txtFileList) {
File[] fs = file.listFiles();
if (fs != null && fs.length > 0) {
for (File f : fs) {
if (f.isDirectory()) {
func(f, txtFileList);
}
if (f.isFile() && "txt".equals(f.getName().substring(f.getName().lastIndexOf(".") + 1))) {
FileInfo fileInfo = new FileInfo()
.setFilePath(f.getAbsolutePath())
.setFileName(f.getName())
.setFileSize(f.length());
txtFileList.add(fileInfo);
}
}
}
return txtFileList;
}
@Accessors(chain = true)
@Data
public static class FileInfo{
private String fileName;
private Long fileSize;
private String filePath;
}
public static void main(String[] args) throws Exception {
ArrayList<FileInfo> txtFileList = new ArrayList<>();
//要遍历的路径
String inputPath = "D:\\";
;
File file = new File(inputPath);
func(file, txtFileList);
// 排序
txtFileList.sort(Comparator.comparing(FileInfo::getFileSize).reversed());
txtFileList.forEach(e -> System.out.println("文件名:" + e.fileName + " 文件大小:" + e.getFileSize() + " 文件路径:" + e.getFilePath()));
}