注意:该系统是将每个学生文件进行按逗号(,)分割成字符串数组
如果文件不是按照此标准会报空指针异常
package com.pointtest.tool;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileFilter;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;
public class DaFenTool {
static Map<Integer,Integer> mapError = new HashMap<>();
public static void main(String[] args) throws Exception {
//System.out.println("请输入文件夹路径");
String answerPath = "D:/abc/hjzy/answer.txt"; //答案文件路径
File answerFile = new File(answerPath); //答案文件File对象
String hjPath = "D:/abc/hjzy"; //作业文件夹路径
File hjDir = new File(hjPath); //封装保存作业的文件夹路径
File[] AllStudentFiles = hjDir.listFiles(new FileFilter() { //将文件夹内所有文件对象封装成数组
@Override
public boolean accept(File p) { //利用过滤器将答案文件answer.txt进行过滤」
if(p.getName().equals("answer.txt")) {
return false;
}
return true;
}
});
for (int i = 1; i <= 70; i++) { //初始化错题计数的HashMap,防止Null指针异常
mapError.put(i, 0);
}
String[] answer = fileProces(answerFile); //对正确答案文件单独处理封装
for (File f : AllStudentFiles) { //遍历打印学生成绩
String studentName = f.getName().substring(0, f.getName().lastIndexOf(".")); //每一个学生姓名
int score = DaFen(answer,fileProces(f)); //每一个学生的成绩
System.out.println(studentName+" : "+score+"分"); //←打印成绩,可换成输出流到文本中
}
System.out.println(mapError); //打印错题数量汇总
}
//方法区
private static int DaFen(String[] answer, String[] stuAnswer) { //打分方法
//记数
int count = 0;
for (int i = 0; i < answer.length; i++) {
String str1 = answer[i].split("\\.")[1]; //必须写双反斜杠
String str2 = stuAnswer[i].split("\\.")[1];
if(str1.equalsIgnoreCase(str2)) {
count++; //正确分数计数
}else {
mapError.put(i+1, mapError.get(i+1)+1); //错题目全部放进map中
}
}
return count; //该方法返回分数
}
//方法区
private static String[] fileProces(File file) throws Exception { //文件对象处理方法
// BR--ISR-FIS--xxx.txt
BufferedReader in =
new BufferedReader(
new InputStreamReader(
new FileInputStream(file))); //字符输入流
StringBuilder sb = new StringBuilder(); //创建一个StringBuilder获得一个对象
String b ;
while((b=in.readLine())!=null) {
sb.append(b);
}
//利用正则去除换行、空格
String regex = " |\\n";
String matches = sb.toString().replaceAll(regex, "");
//System.out.println(matches);
//将字符串封装进数组(总共70对数据)
String[] splits = matches.split(","); //数组:70对
//System.out.println(Arrays.toString(splits)); //测试成功
in.close();
return splits; //返回字符串数组
}
}