java統(tǒng)計txt文件中學(xué)生的出勤情況

一班出勤.jpg
二班出勤.jpg
文件夾說明.jpg

java代碼

package com.work.tiangu.workanalysis.util;

import java.io.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class FileUtilDemo {
    public static void main(String[] arg0) {
        List<File> list = getFileList("D:\\worktile\\export\\2018083122\\demo");//通過文件夾路徑,獲取文件列表,這里也可以優(yōu)化成由用戶輸入路徑的方式
        List<String> allTxtList = new ArrayList<>();//定義一個集合用于存放所有txt文件的行內(nèi)容(存放未清洗的數(shù)據(jù))
        List<String> listTemp = new ArrayList<>();//定義一個集合存放干凈的數(shù)據(jù)(存放清洗后的數(shù)據(jù))
        List<String> listPerson = new ArrayList<>();//定義一個集合存放人的信息
        if (list != null && !list.isEmpty()) {//如果文件列表不是空的
            for (File file : list) {
                allTxtList.addAll(txtContents(file));//將文件轉(zhuǎn)為集合放入總數(shù)據(jù)
            }
            System.out.println("在你選擇的文件路徑中,已讀取到 " + allTxtList.size() + " 條數(shù)據(jù)");
            //去除缺失數(shù)據(jù)
            for (String str : allTxtList) {//遍歷所有數(shù)據(jù)
                if (str.length() > 5) {//如果數(shù)據(jù)未缺失
                    listTemp.add(str);//就把數(shù)據(jù)放入集合,這個集合里存在重復(fù)數(shù)據(jù),接下來統(tǒng)計這個集合里的人數(shù)出勤情況
                }
                if (str.length() > 5 && !listPerson.contains(str)) {//如果數(shù)據(jù)未缺失并且不重復(fù)
                    listPerson.add(str);
                }
            }
            //統(tǒng)計個人出勤次數(shù)
            for (String str : listPerson) {
                System.out.println(str + "出勤次數(shù):" + Collections.frequency(listTemp, str));
            }
            System.out.println("據(jù)有效數(shù)據(jù)統(tǒng)計顯示,有 " + listPerson.size() + " 人有考勤記錄");
        }
        System.out.println("=============================================統(tǒng)計已完成");
    }

    /**
     * 讀取文件夾中的所有文件
     *
     * @param path 文件夾路徑
     */
    private static List<File> getFileList(String path) {
        List<File> fileList = new ArrayList<>();//定義一個存放文件的集合
        try {
            File file = new File(path);//獲取路徑所指向的東西,判斷這個東西是個文件夾還是個文件
            if (file.isDirectory()) {//如果它是個文件夾
                File[] files = file.listFiles();//定義一個數(shù)組存放這個文件夾下面的所有文件(包括文件夾)
                for (File fileIndex : files) {//遍歷這個數(shù)組,挨個獲取里面的文件,不確定這個文件是不是文件夾,如果是文件夾,還需要再讀取文件夾中的文件,這里可能會報NullPointerException
                    if (fileIndex.isDirectory()) {//如果是個文件夾
                        fileList.addAll(getFileList(fileIndex.getPath()));//遞歸獲取文件夾里的文件,放到集合里面,在遇到子文件夾為空時,也會報異常
                    } else {
                        fileList.add(fileIndex);
                    }
                }
            }
            //如果不是個文件夾地址,則不做任何處理
        } catch (NullPointerException e) {
            System.out.println("空指針異常,信息提示為:" + e.getMessage());
        } catch (Exception e) {
            System.out.println("未知異常,信息提示為:" + e.getMessage());
        }
        return fileList;
    }

    /**
     * 讀取一個txt文件,按行讀取,存入集合,這里返回的集合只是一個txt文件的行內(nèi)容
     */
    private static List<String> txtContents(File file) {
        ArrayList<String> txtList = new ArrayList<>();//定義一個集合存儲txt文件每行字符串
        if (file.getName().endsWith(".txt")) {
            try {
                InputStreamReader inputReader = new InputStreamReader(new FileInputStream(file), "GB2312");//引入文件流讀取的工具類,編碼在控制臺輸出時用GB2312,其他地方換成UTF-8
                BufferedReader bf = new BufferedReader(inputReader);//引入字符緩沖輸入流,加快讀取速度
                // 按行讀取字符串
                String str;//定義一個字符串變量
                while ((str = bf.readLine()) != null) {//只要沒有讀到文件末尾,就一直讀取,讀到末尾會返回null
                    txtList.add(str.trim());//去除字符串兩端的空格,緩存在集合中
                    //System.out.println(str);
                }
                bf.close();//文件讀取完畢后,關(guān)閉緩沖流
                inputReader.close();//關(guān)閉文件流
            } catch (IOException e) {
                e.printStackTrace();
            }
            return txtList;
        } else {
            System.out.println("跳過一個非txt文件:" + file.getName());
        }
        return txtList;
    }
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容