package baseStation; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; import java.nio.charset.StandardCharsets; import java.util.Properties; /** * 基站信息类,负责加载/更新 basestation.properties。 */ public class BaseStation { private static final String PROPERTIES_FILE = "basestation.properties"; private String deviceId; private String installationCoordinates; private String iotSimCardNumber; private String deviceActivationTime; private String dataUpdateTime; public BaseStation() { setDefaults(); } /** * 从 basestation.properties 加载数据,失败时回落为默认值 -1。 */ public void load() { Properties properties = new Properties(); try (FileInputStream input = new FileInputStream(PROPERTIES_FILE)) { properties.load(input); this.deviceId = properties.getProperty("deviceId", "-1"); this.installationCoordinates = properties.getProperty("installationCoordinates", "-1"); this.iotSimCardNumber = properties.getProperty("iotSimCardNumber", "-1"); this.deviceActivationTime = properties.getProperty("deviceActivationTime", "-1"); this.dataUpdateTime = properties.getProperty("dataUpdateTime", "-1"); } catch (IOException ex) { System.err.println("无法读取 basestation.properties: " + ex.getMessage()); setDefaults(); } } private void setDefaults() { this.deviceId = "-1"; this.installationCoordinates = "-1"; this.iotSimCardNumber = "-1"; this.deviceActivationTime = "-1"; this.dataUpdateTime = "-1"; } /** * 根据设备编号更新属性并持久化。 */ public void updateByDeviceId(String newDeviceId, String newInstallationCoordinates, String newIotSimCardNumber, String newActivationTime, String newUpdateTime) { if (newDeviceId == null || newDeviceId.trim().isEmpty()) { throw new IllegalArgumentException("设备编号不能为空"); } this.deviceId = newDeviceId.trim(); this.installationCoordinates = valueOrDefault(newInstallationCoordinates); this.iotSimCardNumber = valueOrDefault(newIotSimCardNumber); this.deviceActivationTime = valueOrDefault(newActivationTime); this.dataUpdateTime = valueOrDefault(newUpdateTime); save(); } private String valueOrDefault(String value) { if (value == null || value.trim().isEmpty()) { return "-1"; } return value.trim(); } private void save() { Properties properties = new Properties(); properties.setProperty("deviceId", deviceId); properties.setProperty("installationCoordinates", installationCoordinates); properties.setProperty("iotSimCardNumber", iotSimCardNumber); properties.setProperty("deviceActivationTime", deviceActivationTime); properties.setProperty("dataUpdateTime", dataUpdateTime); try (FileOutputStream output = new FileOutputStream(PROPERTIES_FILE); OutputStreamWriter writer = new OutputStreamWriter(output, StandardCharsets.UTF_8)) { properties.store(writer, "Base station properties"); } catch (IOException ex) { System.err.println("无法保存 basestation.properties: " + ex.getMessage()); } } public String getDeviceId() { return deviceId; } public String getInstallationCoordinates() { return installationCoordinates; } public String getIotSimCardNumber() { return iotSimCardNumber; } public String getDeviceActivationTime() { return deviceActivationTime; } public String getDataUpdateTime() { return dataUpdateTime; } @Override public String toString() { return "BaseStation{" + "deviceId='" + deviceId + '\'' + ", installationCoordinates='" + installationCoordinates + '\'' + ", iotSimCardNumber='" + iotSimCardNumber + '\'' + ", deviceActivationTime='" + deviceActivationTime + '\'' + ", dataUpdateTime='" + dataUpdateTime + '\'' + '}'; } }