Java 代码示例:获取能耗设备数据并写入文件
上述代码是一个 Java 方法,使用 @At("/test") 注解表示该方法可以通过访问 /test 的 URL 来调用。另一个注解 @Ok("json") 表示该方法返回的结果将被转化为 JSON 格式进行输出。
在方法体中,首先通过 HttpClientUtil.getMethod() 方法发送一个 GET 请求获取数据。然后将返回的数据解析为 JSON 对象,提取其中的 dataResults 字段,并将其转化为 Java 的 List 对象。
接下来,通过 szDeviceService.query() 方法查询出数据库中 deviceType 为 "energy" 的设备数据,并保存在 query 变量中。
然后使用流式处理对 objects 列表进行过滤和转换操作,通过 filter() 方法过滤出类型为 Map 的对象,并且该 Map 对象包含 "metername" 键。同时,再通过 filter() 方法排除掉在 query 列表中已经存在的设备名称,最后通过 map() 方法将过滤后的对象转化为 Sz_device 类型的对象,并设置设备名称。最后通过 collect() 方法将过滤后的对象收集到一个新的列表中,保存在 result 变量中。
最后,将 result 列表的大小打印输出,并返回一个包含 result 列表的 JSON 格式的成功结果。
为了将差异的能耗设备数据信息写入 C 盘的 check.txt 文件中,可以在方法体中添加如下代码:
try {
FileWriter fileWriter = new FileWriter("C:/check.txt");
for (Sz_device device : result) {
fileWriter.write(device.getName() + "\n"); // 将设备名称写入文件
}
fileWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
这段代码使用 FileWriter 类创建一个文件写入流,并将文件路径设置为 "C:/check.txt"。然后遍历 result 列表,将设备名称逐行写入文件。最后关闭文件写入流。
完整代码如下:
@At("/test")
@Ok("json")
public Object test() {
// 请求参数
String res = null;
try {
res = HttpClientUtil.getMethod("http://10.11.9.11:8002/ecs-server/" + "/services/getAllDevices");
JSONObject jsonObject = JSONObject.parseObject(res);
JSONArray dataResults = jsonObject.getJSONArray("dataResults");
List<Object> objects = dataResults.toJavaList(Object.class);
List<Sz_device> query = szDeviceService.query(Cnd.where("deviceType", "=", "energy"));
// List<Sz_device> result = new ArrayList<>();
List<Sz_device> result = objects.stream()
.filter(obj -> obj instanceof Map) // Filter objects that are of type Map
.map(obj -> (Map<String, Object>) obj) // Cast object to Map
.filter(map -> map.containsKey("metername")) // Filter maps that contain key "metername"
.filter(map -> query.stream().noneMatch(device -> device.getName().equals(map.get("metername")))) // Filter maps where the value of "metername" is not present in query list
.map(map -> {
Sz_device device = new Sz_device();
device.setName(map.get("metername").toString()); // Set name to "metername" value
return device;
})
.collect(Collectors.toList()); // Collect the filtered Sz_device objects into a list named result
System.out.println("差个数: " + result.size());
try {
FileWriter fileWriter = new FileWriter("C:/check.txt");
for (Sz_device device : result) {
fileWriter.write(device.getName() + "\n"); // 将设备名称写入文件
}
fileWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
return Result.success(result);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
注意:在运行代码之前,请确保 C 盘根目录下有足够的写入权限,并且文件 check.txt 不存在或者是一个空文件。
原文地址: https://www.cveoy.top/t/topic/pzTe 著作权归作者所有。请勿转载和采集!