目录
功能概述
用来对比所交作业的情况,查看谁没交作业。支持有扩展名的所有文件类型如:.txt、.java、.zip等和子文件夹的对比。
开发工具与环境
1.IntelliJ IDEA 2021.2.2
2.jdk 1.8.0_144
3.Maven
导入依赖
导入Hutool工具类,具体详见官网:Hutool
<dependencies>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.1</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.2</version>
</dependency>
</dependencies>
操作步骤
1.准备学生信息Excel
注意:Excel只能有这两列信息,且顺序不能反,否则代码需要改动
2.准备学生作业存放文件夹
3.代码实现
package com.fjw.ex;
import cn.hutool.core.io.FileUtil;
import cn.hutool.poi.excel.ExcelReader;
import cn.hutool.poi.excel.ExcelUtil;
import java.io.File;
import java.util.*;
/**
* @Author: AOGU
* @Date: 2022/5/26
**/
public class Main {
public static void get(Map<String, String> students, List<String> fileNames) {
//将文件名全部变成:学号+姓名(不修改真实文件名,当然hutool有改文件名的方法,这里不多展示)
//这里只考虑要么:学号+姓名,要么:姓名+学号,且学号为三位(当然可以改)
Map<String, String> modifiedFiles = new HashMap<>();
int idLen = 3;//学号位数
for (int i = 0; i < fileNames.size(); i++) {
String fileName = fileNames.get(i);
if (fileName.charAt(0) < '0' || (fileName.charAt(0) > '9')) {
String studentId = fileName.substring(fileName.length() - idLen, fileName.length());
String name = fileName.substring(0, fileName.length() - idLen);
modifiedFiles.put(studentId, name);
} else {
String studentId = fileName.substring(0, idLen);
String name = fileName.substring(idLen, fileName.length());
modifiedFiles.put(studentId, name);
}
}
//获取Excel中的所有Key
Set<String> keySet = students.keySet();
for (String key : keySet) {
if (!modifiedFiles.containsKey(key)) {
System.out.println(key + students.get(key) + "没交作业");
}
}
}
public static void main(String[] args) {
//只需改动这两个路径即可
String excelPath = "D:\\hutool\\class.xlsx";//Excel的路径
String workStagePath = "D:\\hutool";//存放作业的路径
//获取Excle的名单,学号,信息等
ExcelReader reader = ExcelUtil.getReader(excelPath);
List<List<Object>> readAll = reader.read();//这里的效果:[ [学号, 姓名], [501, 小方], [502, 小文] ]
Map<String, String> students = new HashMap<>();
//先将学号名字分别存起来
for (int i = 1; i < readAll.size(); i++) {//下标从一开始是因为0为[学号, 姓名]
students.put(readAll.get(i).get(0).toString(), readAll.get(i).get(1).toString());
}
//获取该 D:\hutool 路径下的所有文件名(就是存放学生作业的目录)
File file = FileUtil.file(workStagePath);
String[] listFileNames = file.list();
// System.out.println("listFileNames" + Arrays.toString(listFileNames));
//获取扩展名的前半部分,例如:501小方.docx 获取为 501小方
List<String> fileNames = new ArrayList<>();
if (listFileNames != null) {
for (int i = 0; i < listFileNames.length; i++) {
fileNames.add(listFileNames[i].split("\\.")[0]);
}
} else {
System.out.println("目标目录无任何文件");
}
// System.out.println(students);
// System.out.println(fileNames);
//开始对比
//注意: excel的左边为学号,右边为姓名
//一般交作业都是要求:学号后三位+姓名
//因为可能有些人不听话,不按要求来,所以需要分两种情况:1.学号+名字 2.名字+学号
System.out.println("正在比对中..................");
get(students, fileNames);
}
}
4.效果展示