最近收作业,收文档实在太烦了。

很多时候需要挨个对比名单,看看哪位大兄弟忘记交作业了,这样实在是费时又费力。

那么,能不能写个程序来,实现一键查询呢?

作业是按学号加姓名的方式命名,那么就可以通过获取Excel名单表,通过文件名的学号和名单进行对比,将名单中对应学号删除,最后剩下的都是没有交的。

下面请看代码

注入依赖

         <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.2.0-beta2</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.22</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.4</version></dependency><dependency><groupId>joda-time</groupId><artifactId>joda-time</artifactId><version>2.10.1</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency>

GetNameFromExcel.java (获取Excel名单)

package com.xmj.easyexcel;import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.joda.time.DateTime;import java.io.FileInputStream;
import java.util.*;/*** @author 冰咖啡* Date:2021/12/7 20:26*/
public class GetNameFromExcel {public Map<Integer,String> getNames(String PATH ) throws Exception {FileInputStream fileInputStream = new FileInputStream(PATH);//创建一个工作簿Workbook workbook = new HSSFWorkbook(fileInputStream);Sheet sheet = workbook.getSheetAt(0);//获取标题内容Row rowTitle = sheet.getRow(0);Map<Integer,String> allStudents = new HashMap<Integer, String>();//学号List<Integer> allId = new ArrayList<Integer>();//姓名List<String> allName = new ArrayList<String>();if(rowTitle!=null){//获取行数int rowCount = sheet.getPhysicalNumberOfRows();//从第二行开始for(int rowNum = 1 ; rowNum<rowCount;rowNum++){Row rowData = sheet.getRow(rowNum);if(rowData!=null){int cellCount = rowTitle.getPhysicalNumberOfCells();for(int cellNum=0;cellNum<cellCount;cellNum++){Cell cell = rowData.getCell(cellNum);if(cell!=null){int cellType = cell.getCellType();String cellValue = "";switch (cellType){case HSSFCell.CELL_TYPE_STRING:cellValue = cell.getStringCellValue();break;case HSSFCell.CELL_TYPE_BOOLEAN:cellValue = String.valueOf(cell.getBooleanCellValue());break;case HSSFCell.CELL_TYPE_BLANK:break;case HSSFCell.CELL_TYPE_NUMERIC:if (HSSFDateUtil.isCellDateFormatted(cell)){Date date = cell.getDateCellValue();cellValue = new DateTime(date).toString("yyyy-MM-dd HH-mm-ss");}else{cell.setCellType(HSSFCell.CELL_TYPE_STRING);cellValue = cell.toString();}break;case HSSFCell.CELL_TYPE_ERROR:System.out.print("[数据类型错误]");break;}//第一列的学号放入listif(cellNum==0) {allId.add(Integer.parseInt(cellValue));}//第二列姓名放入listif(cellNum==1) {allName.add(cellValue);}}}}}}//将对应的学号和姓名放入Mapfor(int i=0;i<allId.size();i++){allStudents.put(allId.get(i),allName.get(i));}//System.out.println(allStudents);fileInputStream.close();return allStudents;}
}

Main.java (根据设定的文件路径进行处理)

package com.xmj.easyexcel;import java.io.File;
import java.util.*;
/*** @author 冰咖啡* Date:2021/12/7 20:05*/
public class Main {public static void main(String[] args) throws Exception {GetNameFromExcel getNameFromExcel = new GetNameFromExcel();//需要进行统计的文件夹路径String filePath = "C:\\Users\\19664\\Desktop\\测试\\数据结构作业-图";//名单路径String ExcelPath = "C:\\Users\\19664\\Desktop\\测试\\名单表.xls";Map<Integer,String> allStudents = getNameFromExcel.getNames(ExcelPath);getFile(filePath,allStudents);}private static void getFile(String filePath,Map<Integer,String> allStudents){//获取文件夹名称String folderName = filePath.substring(filePath.lastIndexOf("\\")+1);System.out.println("\t\t"+folderName);// 获得指定文件对象File file = new File(filePath);// 获得该文件夹内的所有文件   File[] array = file.listFiles();   List<Integer> allFileNames = new ArrayList<Integer>();for(int i=0;i<array.length;i++){   //获取文件名称String FileName = array[i].getName();//将学号存入Integer id = Integer.parseInt(FileName.substring(0,3));allFileNames.add(id);}//如果找到了文件对应的名单中的学号,就说明交了作业,将yesCount值++,并将该学号从map中除去int yesCount=0,noCount=0;for (Integer id : allFileNames) {if (allStudents.containsKey(id)) {System.out.println("学号:"+id+"\t姓名:"+allStudents.get(id)+"\t交了作业");allStudents.remove(id);yesCount++;}}//剩下的都是没有找到的,说明没有交Iterator<Map.Entry<Integer, String>> students = allStudents.entrySet().iterator();while(students.hasNext()){Map.Entry<Integer, String> student = students.next();System.out.println("学号:"+student.getKey()+"\t姓名:"  + student.getValue()+"\t没有交");noCount++;}System.out.println("有"+yesCount+"个同学交了作业");System.out.println("还有"+noCount+"个同学没有交作业");}
}

名单表(第一列为学号,第二列为姓名)

需要进行统计的文件夹

结果如下


JAVA一键获取文件名并对比Excel名单,看看谁没有交作业相关推荐

  1. java filesaver获取文件名_FileSaver导出excel

    导出excel也是经常用到的一个功能,目前遇到一个比较简单的需求,就是导出统计报表,需要请求服务器,然后把接收的json转化成浏览器可导出的形式,再推给浏览器进行导出 下面是数据转化部分,每行记录都需 ...

  2. java ftp获取文件名的方法_小猿圈Java学习-URL地址的组成格式

    URL的全称是Uniform Resource Locator,意思是统一资源定位符,俗称网络地址或网址.网络上的每个文件及接口,都有对应的URL网址,它规定了其他设备如何通过一系列的路径找到自己,犹 ...

  3. Python遍历文件夹获取文件名并写入excel

    # coding=utf-8 import os import xlwt #操作excel模块 import sysfile_path = sys.path[0]+'\\filenamelist.xl ...

  4. java filesaver获取文件名_FileSaver

    保存当前文档到服务器文件夹. 保存当前文档到指定的服务器文件夹.如果您想把文档保存到数据库字段,请调用 getFileBytes() 或 getFileStream() 方法. 注意:Web Serv ...

  5. java递归获取文件名_递归打印文件名

    class="java" name="code">import java.io.File; import java.io.IOException; pub ...

  6. java获取文件名方法,利用Java获取文件名、类名、方法名和行号的方法小结

    大家都知道,在C语言中,我们可以通过宏FILE. __LINE__来获取文件名和行号,而在Java语言中,则可以通过StackTraceElement类来获取文件名.类名.方法名.行号,具体代码如下: ...

  7. java 简单获取Excel表格内容(初学者)

    java 简单获取Excel表格内容(初学者) 代码: package cn.ccaih.read;import org.apache.poi.ss.usermodel.Cell; import or ...

  8. 判断日期是否为当月最后一天_对比Excel,怎么用Python获取指定月最后一天的日期...

    这是群友的一个需求.他想根据一个给定的日期,获取该给定日期在这个年月的最后一天的日期,并且要求在Python中怎么做.基于此,我就想到了对比Excel,在Python中完成这个需求. Excel完成这 ...

  9. Java准确获取Word/Excel/PPT/PDF的页数(附Word页数读不准的处理办法)

    Java准确获取Word/Excel/PPT/PDF的页数(附Word页数读不准的处理办法) 1.需求背景 2.环境准备工作 2.1 JACOB介绍及安装 2.2 Microsoft Office W ...

  10. 使用fetch()获取响应头的content-disposition拿到文件名,下载Excel文件

    需求就是下载一个Excel文件,包括下载,导出,都是调用后端的接口.因为文件名返回再了响应头的content-disposition.前端需要进行一个处理,拿到文件名. 先上代码 downloadDe ...

最新文章

  1. Python入门篇-匿名函数
  2. 软件工程硕士和计算机硕士论文题目,计算机硕士毕业论文答辩自述
  3. 2440 nand flash和nor flash上启动
  4. BestCoder Round #39 解题报告
  5. Memchache 总结
  6. php添加gd库,linux下为php添加GD库(重新编译php)
  7. [Python] L1-047 装睡-PAT团体程序设计天梯赛GPLT
  8. 利用Matlab实现线性动态电路的可视化研究
  9. single crop和muti-crop
  10. 酷派t2co1怎么升Android5,而且双清不了怎么办Coolpad725?酷 – 手机爱问
  11. 飞桨领航团AI达人创造营第三课笔记
  12. 锂电池升压到5V1A,PW5300设计布局
  13. 大宋王朝王国的命运——何辉著
  14. Unity3d NGUI的使用(二)(UILabel中文字体及可点击的字体)
  15. 纵向时间线html,纯CSS实现的响应式时间轴(时间线)布局
  16. 每日新闻 | 科技部出台27条措施;中国联通加快5G建设
  17. 计算机运维中常见英语单词,盘点网络工程师需要掌握的英语单词(A-C篇)
  18. 7-2 复数计算 (10分)
  19. WORD文档转为EXCEL表格
  20. 【GAMES201学习笔记】00 - Taichi 编程

热门文章

  1. linux安装字体库(simSun为例)
  2. Linux中c语言strcmp,c语言常用函数strcmp函数和strcpy函数
  3. ting56 下载 有声小说 超禁忌游戏
  4. C专家编程--随记(二)
  5. 浅析视频云行业及实现技术
  6. C语言商品超市管理系统课程设计,C语言课程设计超市信息管理系统.doc
  7. 【程序源代码】番茄时间小程序
  8. python播放音乐同步歌词_Python零基础学习代码实践 —— 模拟播放器中的歌词显示...
  9. 美赛常用查数据查文献网站
  10. 组态王与DLT645-2007电能表通讯调试总结