Java一键对比未交作业学生信息名单(使用Hutool工具类)【SmallProject系列】

2 篇文章 0 订阅

目录

功能概述

开发工具与环境

导入依赖

操作步骤

1.准备学生信息Excel

2.准备学生作业存放文件夹

3.代码实现 

4.效果展示


功能概述

用来对比所交作业的情况,查看谁没交作业。支持有扩展名的所有文件类型如:.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.效果展示

 

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Aogu181

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值