package home; import java.io.*; import java.util.Properties; /** * 发卡机系统配置类 * 用于管理系统运行时的各项配置参数 */ public class MachineConfig { // 配置属性 private String machineId; // 发卡机编号 private String serverAddress; // 服务器地址 private int serverPort; // 服务器端口 private String adminPassword; // 管理员密码 private String fetchCardPassword; // 取卡密码 private String systemLanguage; // 系统语言 private String currentVersion; // 当前系统版本 private int totalSlots; // 卡槽总数 private String readCardMode; // 读卡号模式 private String defaultSerialPort; // 默认串口 private int pollingInterval; // 轮询时间(毫秒) private int baudrate; // 波特率 // 配置文件路径 private static final String CONFIG_FILE = "config.properties"; // 默认值常量 private static final String DEFAULT_MACHINE_ID = "M001"; private static final String DEFAULT_SERVER_ADDRESS = "127.0.0.1"; private static final int DEFAULT_SERVER_PORT = 8080; private static final String DEFAULT_ADMIN_PASSWORD = "admin123"; private static final String DEFAULT_FETCH_CARD_PASSWORD = "fetch123"; private static final String DEFAULT_SYSTEM_LANGUAGE = "zh-CN"; private static final String DEFAULT_CURRENT_VERSION = "1.0.0"; private static final int DEFAULT_TOTAL_SLOTS = 60; private static final String DEFAULT_READ_CARD_MODE = "AUTO"; private static final String DEFAULT_SERIAL_PORT = "COM1"; private static final int DEFAULT_POLLING_INTERVAL = 100; // 默认值常量 - 在现有常量后添加 private static final int DEFAULT_BAUDRATE = 57600; /** * 构造函数 - 使用默认值初始化 */ public MachineConfig() { loadDefaultValues(); } /** * 构造函数 - 从配置文件加载 * @param configFilePath 配置文件路径 */ public MachineConfig(String configFilePath) { loadFromFile(configFilePath); } /** * 加载默认值 */ private void loadDefaultValues() { this.machineId = DEFAULT_MACHINE_ID; this.serverAddress = DEFAULT_SERVER_ADDRESS; this.serverPort = DEFAULT_SERVER_PORT; this.adminPassword = DEFAULT_ADMIN_PASSWORD; this.fetchCardPassword = DEFAULT_FETCH_CARD_PASSWORD; this.systemLanguage = DEFAULT_SYSTEM_LANGUAGE; this.currentVersion = DEFAULT_CURRENT_VERSION; this.totalSlots = DEFAULT_TOTAL_SLOTS; this.readCardMode = DEFAULT_READ_CARD_MODE; this.defaultSerialPort = DEFAULT_SERIAL_PORT; this.pollingInterval = DEFAULT_POLLING_INTERVAL; this.baudrate = DEFAULT_BAUDRATE; } /** * 从配置文件加载配置 * @param filePath 配置文件路径 */ public void loadFromFile(String filePath) { Properties props = new Properties(); try (InputStream input = new FileInputStream(filePath)) { props.load(input); // 读取配置值,如果不存在则使用默认值 this.machineId = props.getProperty("machine.id", DEFAULT_MACHINE_ID); this.serverAddress = props.getProperty("server.address", DEFAULT_SERVER_ADDRESS); this.serverPort = Integer.parseInt(props.getProperty("server.port", String.valueOf(DEFAULT_SERVER_PORT))); this.adminPassword = props.getProperty("admin.password", DEFAULT_ADMIN_PASSWORD); this.fetchCardPassword = props.getProperty("fetch.card.password", DEFAULT_FETCH_CARD_PASSWORD); this.systemLanguage = props.getProperty("system.language", DEFAULT_SYSTEM_LANGUAGE); this.currentVersion = props.getProperty("current.version", DEFAULT_CURRENT_VERSION); this.totalSlots = Integer.parseInt(props.getProperty("total.slots", String.valueOf(DEFAULT_TOTAL_SLOTS))); this.readCardMode = props.getProperty("read.card.mode", DEFAULT_READ_CARD_MODE); this.defaultSerialPort = props.getProperty("default.serial.port", DEFAULT_SERIAL_PORT); this.pollingInterval = Integer.parseInt(props.getProperty("polling.interval", String.valueOf(DEFAULT_POLLING_INTERVAL))); this.baudrate = Integer.parseInt(props.getProperty("baudrate", String.valueOf(DEFAULT_BAUDRATE))); } catch (IOException e) { System.err.println("无法读取配置文件: " + filePath + ", 使用默认配置"); loadDefaultValues(); } catch (NumberFormatException e) { System.err.println("配置文件中的数字格式错误: " + e.getMessage() + ", 使用默认值"); this.baudrate = DEFAULT_BAUDRATE; } } /** * 保存配置到文件 * @param filePath 配置文件路径 */ public void saveToFile(String filePath) { Properties props = new Properties(); // 设置配置属性 props.setProperty("machine.id", this.machineId); props.setProperty("server.address", this.serverAddress); props.setProperty("server.port", String.valueOf(this.serverPort)); props.setProperty("admin.password", this.adminPassword); props.setProperty("fetch.card.password", this.fetchCardPassword); props.setProperty("system.language", this.systemLanguage); props.setProperty("current.version", this.currentVersion); props.setProperty("total.slots", String.valueOf(this.totalSlots)); props.setProperty("read.card.mode", this.readCardMode); props.setProperty("default.serial.port", this.defaultSerialPort); props.setProperty("polling.interval", String.valueOf(this.pollingInterval)); props.setProperty("baudrate", String.valueOf(this.baudrate)); try (OutputStream output = new FileOutputStream(filePath)) { props.store(output, "发卡机系统配置"); System.out.println("配置已保存到: " + filePath); } catch (IOException e) { System.err.println("无法保存配置文件: " + filePath + ", 错误: " + e.getMessage()); } } /** * 保存配置到默认文件 */ public void saveToFile() { saveToFile(CONFIG_FILE); } // Getter 和 Setter 方法 public String getMachineId() { return machineId; } public void setMachineId(String machineId) { this.machineId = machineId; } public String getServerAddress() { return serverAddress; } public void setServerAddress(String serverAddress) { this.serverAddress = serverAddress; } public int getServerPort() { return serverPort; } public void setServerPort(int serverPort) { this.serverPort = serverPort; } public String getAdminPassword() { return adminPassword; } public void setAdminPassword(String adminPassword) { this.adminPassword = adminPassword; } public String getFetchCardPassword() { return fetchCardPassword; } public void setFetchCardPassword(String fetchCardPassword) { this.fetchCardPassword = fetchCardPassword; } public String getSystemLanguage() { return systemLanguage; } public void setSystemLanguage(String systemLanguage) { this.systemLanguage = systemLanguage; } public String getCurrentVersion() { return currentVersion; } public void setCurrentVersion(String currentVersion) { this.currentVersion = currentVersion; } public int getTotalSlots() { return totalSlots; } public void setTotalSlots(int totalSlots) { this.totalSlots = totalSlots; } public String getReadCardMode() { return readCardMode; } public void setReadCardMode(String readCardMode) { this.readCardMode = readCardMode; } public String getDefaultSerialPort() { return defaultSerialPort; } public void setDefaultSerialPort(String defaultSerialPort) { this.defaultSerialPort = defaultSerialPort; } public int getPollingInterval() { return pollingInterval; } public void setPollingInterval(int pollingInterval) { this.pollingInterval = pollingInterval; } // 添加Getter和Setter方法 public int getBaudrate() { return baudrate; } public void setBaudrate(int baudrate) { this.baudrate = baudrate; } @Override public String toString() { return "MachineConfig{" + "machineId='" + machineId + '\'' + ", serverAddress='" + serverAddress + '\'' + ", serverPort=" + serverPort + ", adminPassword='" + "***" + '\'' + // 密码不直接显示 ", fetchCardPassword='" + "***" + '\'' + // 密码不直接显示 ", systemLanguage='" + systemLanguage + '\'' + ", currentVersion='" + currentVersion + '\'' + ", totalSlots=" + totalSlots + ", readCardMode='" + readCardMode + '\'' + ", defaultSerialPort='" + defaultSerialPort + '\'' + ", pollingInterval=" + pollingInterval + '\'' + ", baudrate=" + baudrate + '}'; } }