You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java考勤程序实现每日日期命名文件存储考勤记录咨询

Java考勤程序添加文件保存功能解决方案

以下是优化后的完整代码,既实现了每日生成以当日日期命名的文件存储考勤记录的需求,还简化了原代码中重复的考勤录入逻辑:

import java.util.*;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.charset.StandardCharsets;
import java.io.IOException;

public class AttendanceRecorder {
    // 存储学生名单,替代原有的单个变量,更易维护
    private static final List<String> STUDENTS = Arrays.asList(
        "Student 1", "Student 2", "Student 3", "Student 4", "Student 5",
        "Student 6", "Student 7", "Student 8", "Student 9"
    );
    // 指定考勤记录存储的文件夹,可修改为你需要的路径
    private static final String RECORD_FOLDER = "attendance_records";

    public static void main(String args[]) {
        LocalDate today = LocalDate.now();
        String dateStr = today.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
        System.out.println("Date : " + dateStr);

        // 1. 创建存储文件夹(如果不存在)
        try {
            Files.createDirectories(Paths.get(RECORD_FOLDER));
        } catch (IOException e) {
            System.err.println("创建文件夹失败: " + e.getMessage());
            return;
        }

        Scanner sc = new Scanner(System.in);
        StringBuilder recordContent = new StringBuilder();
        recordContent.append("考勤日期: ").append(dateStr).append("\n\n");
        recordContent.append("学生考勤记录:\n");

        // 2. 循环处理每个学生的考勤录入
        System.out.println("Name of Students : \n");
        STUDENTS.forEach(System.out::println);
        System.out.println("\n请输入每个学生的考勤状态(P/p代表出勤,其他代表缺勤)");

        for (String student : STUDENTS) {
            System.out.print("Is " + student + " present? ");
            String input = sc.nextLine().trim();
            String status = input.equalsIgnoreCase("p") ? "出勤" : "缺勤";
            
            System.out.println(student + " " + status);
            // 把记录添加到内容中
            recordContent.append(student).append(" : ").append(status).append("\n");
        }

        // 3. 写入当日考勤文件
        String filePath = RECORD_FOLDER + "/" + dateStr + ".txt";
        try {
            Files.write(Paths.get(filePath), recordContent.toString().getBytes(StandardCharsets.UTF_8));
            System.out.println("\n考勤记录已保存到: " + filePath);
        } catch (IOException e) {
            System.err.println("保存考勤记录失败: " + e.getMessage());
        }

        sc.close();
    }
}

关键功能说明

  • 文件夹自动创建:程序启动时会自动创建attendance_records文件夹(如果不存在),避免因路径不存在导致的写入错误
  • 规范文件名:用yyyy-MM-dd格式作为文件名(比如2024-05-20.txt),确保文件名合法、无特殊字符,且按日期排序方便查看
  • 简化考勤逻辑:用List存储学生名单,通过循环处理每个学生的考勤,彻底消除原代码中重复的if-else块,后续添加/删除学生只需修改List即可
  • 文件写入实现:使用Java NIO的Files.write方法,简洁高效地将考勤内容写入文件,默认使用UTF-8编码保证中文显示正常

运行注意事项

  • 生成的考勤文件会存放在项目根目录下的attendance_records文件夹中,如果你需要指定其他路径,直接修改RECORD_FOLDER常量为绝对路径即可(比如"D:/attendance_records")
  • 若输入时不小心输入空格,程序通过trim()方法自动去除,不影响状态判断

内容的提问来源于stack exchange,提问作者ChimpBrain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 22:45:59