关于IO操作的一个面试题,题解

关于IO操作的一个面试题,题解(不是最优解,写的不好)

题目:

递归读取文件夹下的全部文件(目录层次结构不确定),解析出以.log结尾的文件的数据之后,根据id进行排序

题解:

定义一个HomeWorkUser实体类

public class HomeWorkUser {
    private Integer id;
    private String name;
    private Integer age;

    @Override
    public String toString() {
        return "HomeWorkUser{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}
import java.io.*;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;

public class FileOperate {
    public static void main(String[] args) {
        String path = "C:/Users/86151/Desktop/test-data";

        List<HomeWorkUser> users = new ArrayList<>();

        loopFiles(path, users);

        users.sort(Comparator.comparingInt(HomeWorkUser::getId));

        System.out.println("users = " + users);
    }

    private static void loopFiles(String path, List<HomeWorkUser> users) {

        File root = new File(path);
        if (root.isDirectory()) {
            File[] files = root.listFiles();
            if (files == null) {
                return;
            }
            for (File file : files) {
                loopFiles(file.getAbsolutePath(), users);
            }
        } else {
            if (!root.getName().endsWith(".log")) {
                return;
            }

            List<HomeWorkUser> list = readFile(root);

            users.addAll(list);

        }

    }

    private static List<HomeWorkUser> readFile(File file) {

        List<HomeWorkUser> users = new ArrayList<>();
        try (BufferedReader reader = new BufferedReader(new FileReader(file))) {
            String line;
            while ((line = reader.readLine()) != null) {
                String[] arr = line.split(",");

                HomeWorkUser user = new HomeWorkUser();
                user.setId(Integer.valueOf(arr[0]));
                user.setName(arr[1]);
                user.setAge(Integer.valueOf(arr[2]));

                users.add(user);
            }
            return users;

        } catch (FileNotFoundException e) {
//            e.printStackTrace();
            throw new IllegalArgumentException("文件找不到");
        } catch (IOException e) {
//            e.printStackTrace();
            throw new IllegalArgumentException("文件读取异常");
        }

    }
posted on 2021-02-02 10:43  测开小白的杂货铺  阅读(150)  评论(0)    收藏  举报