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

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值