题目要求
由于在线网课提交作业过多,为了减轻学委及老师统计未交学生名单,我们来写一段儿代码完成此需求!
A:提供的内容:
学生名单一份学生作业若干份,分别存储在”作业”文件夹中
B:最终的结果:
在”作业统计结果.txt” 中没有交作业的学生名字后边添加”未交作业”,已提交的名字后边添加”已提交”
C:编程思路(仅供参考):
1: 使用BufferedReader 读取原始名单并以<key,value> (<” 张三”,” 未交作业”>) 存入HashMap 中
2:使用File.list()方法获取提交作业文件夹(第四次作业)中的所有文件名字,并与HashMap中存储的原始名单做对比,并将对比结果存储在HashMap 中,如果交了作业则更新此名字对象的value 值,否则不执行任何操作
3:将更新完毕的HashMap 进行遍历并通过BufferedWriter 写入到指定的“作业统计结果.txt”文件中
D:注意事项:
在进行名字读取时可能会出现中文乱码,建议通过搜索”BufferedReader 和FileReader 读取txt 文件乱码” 来解决!
相关代码如下:
public static void main(String[] args) throws IOException {
// 读取全班的学生名单
HashMap<String, String> map = null;
InputStreamReader isr = new InputStreamReader(
new FileInputStream("C:\\Users\\Desktop\\第2次大作业\\作业\\学生名单.txt"), "UTF-8");
BufferedReader br = new BufferedReader(isr);
// 存入hashmap中
map = new HashMap<String, String>();
String line = "";
while ((line = br.readLine()) != null) {
map.put(line, "未提交作业");
// System.out.println(line);
}
// 读取提交作业的学生名单
File file = new File("C:\\Users\\Desktop\\第2次大作业\\作业\\第四次作业");
String[] names = file.list();
String name = "";
// 遍历数组
for (String str : names) {
int end = str.lastIndexOf(".");
name = str.substring(0, end);
// 判断
// boolean isContains = name.contains(line);
// if (isContains) {
map.put(name, "已提交");// 更新value
// }
// System.out.println(name);
// 把结果写入txt中
BufferedWriter bw = null;
bw = new BufferedWriter(new FileWriter("C:\\Users\\Desktop\\第2次大作业\\作业\\作业统计结果.txt"));
Iterator<String> it = map.keySet().iterator();
while (it.hasNext()) {
String key = it.next();
String value = map.get(key);
bw.write(key + "," + value);
bw.newLine();
}
// 关闭
if (br != null)
br.close();
if (bw != null)
bw.close();
}
}