关于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("文件读取异常");
}
}
浙公网安备 33010602011771号