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