前言
Hello!大家好,我是一名大二软件工程专业的学生,本篇文章想向你们介绍一个自制的快速查看是否收齐学生文件的小小java程序。我想作为一名班级干部的你常常会接到收集班级资料文件,学习报告等文件,是否你有为查看是否收齐文件而浪费更多的时间呢。这个我深感体会,因为收学习报告,资料文件对我来说是经常的事。但作为将来的一名程序员来说,怎能做这种低效率的工作呢。因此做了这个小程序,也希望能帮到你们。这是我来到优快云的第一篇文章嗨害嗨~
1. 将收取的文件放到文件夹中
2 创建一个学生信息文件
3 java实现代码
1) 获取字符串中的学号
GetStuId类获取要匹配的唯一标识-学号,这里设置的是长度为8的学号,也可自行修改要匹配的信息。这里用的是学号作为唯一标识去匹配学生信息表。
//获取字符串中指定长度的连续数字
public class GetStuId {
//获取长度为8的数字
static int idLength = 8;
public static String getStuId(String fileName) {
//basei要截取字符串的起始下标,basej末尾下标,k记录连续数字长度,m记录上一个是否为数字
int basei = 0, basej = 0, k = 0, m = 0;
for (int i = 0; i < fileName.length(); i++) {
if (fileName.charAt(i) >= 48 && fileName.charAt(i) <= 57) {
if (m == 1) {
k++;
if (k == idLength) {
basej = i;
break;
}
} else {
k = 1;
}
m = 1;
} else {
basei = i + 1;
m = 0;
}
}
//返回从字符串中截取的所需信息
return fileName.substring(basei, basej + 1);
}
}
2)获取存放收取文件的文件夹中的所有文件名
GetFileName类获取文件夹中所有文件的名称,将所收集的文件放在同一个文件夹中,用于文件名称的获取和与学生信息表的匹配。
import java.io.File;
import java.util.ArrayList;
//获取文件夹内所有文件的名称
public class GetFileName {
//要获取文件夹的指定路径
private static String path = "C:\\Users\\lenovo\\Desktop\\软件二班 第二组 操作系统实验报告";
//获取所有文件名称
public static void getFilesName(ArrayList<String> stu_id) {
File file = new File(path);
if (!file.exists()) {
System.out.println(path + " not exists");
return;
}
//获取所有文件
File result[] = file.listFiles();
for (int i = 0; i < result.length; i++) {
File f = result[i];
if (f.isFile()) {
//获取文件名中的学号
String id = GetStuId.getStuId(f.getName());
stu_id.add(id);
}
}
}
}
3)匹配收集的文件列表和学生信息表
MatchStuForm类匹配学生信息表,找打已交学生和未交学生,这样可以很清晰的查看文件的收集情况。
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
//匹配学生信息表
public class MatchStuForm {
//存放学生信息文件的绝对路径
private static String path = "C:\\Users\\lenovo\\Desktop\\学生信息单.txt";
/**
* 匹配所交文件学生号表和学生信息表,获取已交学生表,未交学生表
* @param stuIds – 所交文件学生号表
* overdue –未交写生表
* dueStu - 已交学生表
* */
public static void matchStuMessForm(ArrayList<String> stuIds, ArrayList<String> overdueStu, ArrayList<String> dueStu) {
try {
File myFile = new File(path);//通过字符串创建File类型对象,指向该字符串路径下的文件
if (myFile.isFile() && myFile.exists()) { //判断文件是否存在
InputStreamReader Reader = new InputStreamReader(new FileInputStream(myFile), "UTF-8");
BufferedReader bufferedReader = new BufferedReader(Reader);
String lineTxt;
while ((lineTxt = bufferedReader.readLine()) != null) {
//buffereReader.readLine()按行读取写成字符串截取字符串中的学生号
String stu_id = GetStuId.getStuId(lineTxt);
//判断读取的学号中是否包含在学生文件中
if (stuIds.contains(stu_id)) {
//向已交表添加学生信息
dueStu.add(lineTxt);
} else {
//向未交表添加学生信息
overdueStu.add(lineTxt);
}
}
Reader.close();
} else {
System.out.println("找不到指定的文件");
}
} catch (Exception e) {
System.out.println("读取文件内容出错");
e.printStackTrace();
}
}
}
4) 实现快速得出文件收集的情况
ReceiveJobsForQuickPairing类实现快速查询所交文件已交人信息,未交人信息。
import java.util.ArrayList;
//实现快速查询所交文件数目已交人信息,未交人信息
public class ReceiveJobsForQuickPairing {
public ArrayList<String> stuIds;
public ArrayList<String> overdueStu;
public ArrayList<String> dueStu;
ReceiveJobsForQuickPairing() {
stuIds = new ArrayList<>();
overdueStu = new ArrayList<>();
dueStu = new ArrayList<>();
GetFileName.getFilesName(stuIds);
}
//匹配学生信息并显示匹配结果
public void MatchStudentInformation() {
MatchStuForm.matchStuMessForm(stuIds, overdueStu, dueStu);
showStuForm();
}
//显示结果信息
public void showStuForm() {
System.out.println("已交学生:");
for (String student : dueStu) {
System.out.println(student);
}
System.out.println("未交学生:");
for (String student : overdueStu) {
System.out.println(student);
}
}
public static void main(String[] args) {
ReceiveJobsForQuickPairing r = new ReceiveJobsForQuickPairing();
r.MatchStudentInformation();
}
}
3 运行结果
可通过未交学生知道是否收集文件
4 结束语
我来到优快云已经一年了,但这我写的第一篇文章,感到非常开心。同时我非常感谢此平台中花费大量时间,无私奉献的博主们,你们发布了非常多的详细的认真的文章,对我的编程学习提供了很大的帮助。我感觉我也应该学习你们的精神,以后会努力发布一些技术知识文章,希望像你们一样帮助更多的人。