Java读写txt文件案例-统计学生名单
Java读写txt文件案例-统计学生名单,具体应用请看代码中的实现原理。
package shuzu;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
/** * @Description:本程序实现统计未提交作业的学生名单。须提前准备好完整的学生名单 * 实现原理:(1)从某一文件夹下读取所有的作业文件(格式样例:作业1-姓名-学号,如果分隔符不是“-”可以到getFileName方法中修改),将学生的姓名写入到中间文件“已提交作业的人员名单.txt”. * (2)分别从“已提交作业的人员名单.txt”、“学生完整名单.txt”两个文件中读取信息,并返回partNameList,fullNameList两个字符串数组,分表表示“已提交作业的名单”和“学生完整名单” * (3)将“学生完整名单”中的每一个学生姓名作为关键词到“已提交作业的学生名单”中做查询,若能查到则不做处理,若查不到则将其写入“未提交作业的学生名单.txt”文件。 * @author zhk * @Date 2019-11-4 * */
public class GetFileName {
/* * 获取已提交作业的人员名单 */
private static void getFileName(String path) throws IOException{
// 获得指定文件对象
File file = new File(path);
// 获得该文件夹内的所有文件
File[] array = file.listFiles();
for(int i=0;i<array.length;i++)
{
if(array[i].isFile())//如果是文件
{
String[] str = array[i].getName().split("-");
if(str.length >= 3) {
// System.out.println(str[1]);
write2Txt("E:\\已提交作业的人员名单.txt",str[1]);
}
}
}
}
/** * 写入到txt 模式:换行、追加 * @param outPath * @param object * @throws IOException */
public static void write2Txt(String outPath,String object) throws IOException {
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outPath,true),"UTF-8"));
out.write(object+"\r\n");
out.close();
}
/** * 按行读取txt中的name 返回List * @return * @throws IOException */
public static String[] toArrayByInputStreamReader1(String name) {
// 使用ArrayList来存储每行读取到的字符串
ArrayList<String> arrayList = new ArrayList<>();
try {
File file = new File(name);
InputStreamReader inputReader = new InputStreamReader(new FileInputStream(file),"UTF-8");
BufferedReader bf = new BufferedReader(inputReader);
// 按行读取字符串
String str;
while ((str = bf.readLine()) != null) {
arrayList.add(str.trim());
}
bf.close();
inputReader.close();
} catch (IOException e) {
e.printStackTrace();
}
// 对ArrayList中存储的字符串进行处理
int length = arrayList.size();
String[] array = new String[length];
for (int i = 0; i < length; i++) {
String s = arrayList.get(i);
array[i] = s;
}
// 返回数组
return array;
}
public static void main(String[] args) throws IOException {
//作业目录
String path = "E:\\Java作业3";
//已提交作业的人员名单 中间文件
String path2 = "E:\\已提交作业的人员名单.txt";
//学生完整名单
String path3 = "E:\\学生完整名单.txt";
//未提交作业的人员名单
String path4 = "E:\\未交作业人员名单.txt";
getFileName(path);
String[] partNameList = toArrayByInputStreamReader1(path2);
String[] fullNameList = toArrayByInputStreamReader1(path3);
System.out.println("已提交作业的人数:"+partNameList.length);
System.out.println("学生总人数:"+fullNameList.length);
System.out.println("未提交作业的学生总人数:"+(fullNameList.length - partNameList.length ));
System.out.println("未提交作业的学生名单:");
for (int i=0;i<fullNameList.length;i++)
for (int j=0;j<partNameList.length;j++) {
if(fullNameList[i].equals(partNameList[j])) {
//System.out.println(strList[i]);
break;
}
else if(fullNameList[i] != partNameList[j] && j==partNameList.length-1) {
System.out.println(fullNameList[i]);
write2Txt(path4,fullNameList[i]);
}
}
System.out.println("处理完成!");
}
}
参考:https://blog.csdn.net/milletGuo/article/details/80144290
https://www.cnblogs.com/gengaixue/p/6684087.html