获取文件名称路径以及大小

获取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()));
    }