package compareConfFile;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Properties;
import java.util.Set;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.Resource;
import org.springframework.util.DefaultPropertiesPersister;
import org.springframework.util.PropertiesPersister;
public class CompareFile {
public static HashMap<String, Properties> map_143 = new HashMap<String, Properties>();
public static HashMap<String, Properties> map_144 = new HashMap<String, Properties>();
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
initData("C:\\143conf", map_143);
initData("C:\\144conf", map_144);
System.out.println("143上配置文件数:"+map_143.size()+"----144上配置文件数:"+map_144.size());
compareMap(map_143, map_144);
//test("rmapi.properties");
}
public static void initData(String filepath, HashMap<String, Properties> map)
throws IOException {
File file = new File(filepath);
File[] files = file.listFiles();
if(files==null || files.length==0){
System.out.println("文件夹路径错误---filepath="+filepath);
}
if (files != null && files.length > 0) {
for (File f : files) {
if (f.isDirectory())
continue;
if (!f.getName().endsWith(".conf")
&& !f.getName().endsWith(".properties"))
continue;
Resource resource = new FileSystemResource(f);
PropertiesPersister propertiesPersister = new DefaultPropertiesPersister();
Properties props = new Properties();
propertiesPersister.load(props, resource.getInputStream());
map.put(f.getName().toLowerCase(), props);
}
}
}
public static void compareMap(HashMap<String, Properties> map143,
HashMap<String, Properties> map144) {
if(map143==null || map143.isEmpty() || map144==null || map144.isEmpty()){
System.out.println("文件夹里面的配置文件没有读取到,请先确定文件夹路径是否正确");
return;
}
StringBuilder sb = new StringBuilder();
for(String s:map144.keySet()){
if(map143.containsKey(s)){
compareProperties(s, map143.get(s), map144.get(s));
}else{
sb.append(s+",");
}
}
System.out.println("143相对于144上缺少的配置文件为:"+sb.toString());
}
public static void compareProperties(String fileName,Properties p143,Properties p144) {
System.out.println("name="+fileName+"----143_size="+p143.size()+"----144_size="+p144.size());
if(p143==null || p143.isEmpty() || p144==null || p144.isEmpty()){
System.out.println("配置文件有为空的情况----------fileName="+fileName);
System.out.println("\r\n");
return;
}
Set<Object> keys = p144.keySet();
List<Object> lackKeys = new ArrayList<Object>();
for (Object o : keys) {
if(p143.containsKey(o))continue;
lackKeys.add(o);
}
if(lackKeys.size()>0){
System.out.println("在文件"+fileName+"中143上需要补充的配置项为:");
for(Object o:lackKeys){
System.out.println(o);
}
}
System.out.println("\r\n");
}
public static void test(String key){
Properties p143 = map_143.get(key);
Set<Object> keys143 = p143.keySet();
System.out.println("143----keys=:");
StringBuilder sb143 = new StringBuilder();
for(Object o:keys143){
sb143.append(o+",");
}
System.out.println(sb143.toString());
Properties p144 = map_144.get(key);
Set<Object> keys144 = p144.keySet();
System.out.println("144----keys=:");
StringBuilder sb144 = new StringBuilder();
for(Object o:keys144){
sb144.append(o+",");
}
System.out.println(sb144.toString());
}
}
最近在做一期系统升级到二期的工作,相关数据库、配置文件的差异我都写了点代码自动进行对比,这样相对于人工去做的话效率可能更高一点,另外出错的概率也小点。
这里面最主要的代码就是红色部分,就是把非.properties后缀的文件转化为properties对象
所需jar包在附件
相关推荐
主要介绍了Python运维自动化之nginx配置文件对比操作,涉及Python针对文件的读取、遍历、比较进而达到差异对比的相关操作技巧,需要的朋友可以参考下
3.比较两个xml配置文件的差异。以服务器的为准。4.自动更新程序下载差异文件到自动更新程序的临时文件目录。5.下载完成后将临时文件目录的东西拷贝到相应目录。6.删除临时文件夹。7.启动应用程序。 说明: 目前没有...
- 用户可以指定记住第一个和第二个文件或目录的数量。 - 不需要制定两个文件名,仅输入一个目录和一个文件名进行比较,EximDiff 将会尝试使用先前指定目录下的文件名进行比较。 - 在第一个和第二个文件或目录之间...
dataCompare 是一个数据库比对工具:支持hive表数据比对,mysql、Doris 数据比对,实现自动化配置进行数据比对,避免频繁写sql 进行处理,后续考虑支持ck等等 功能介绍 (1)低代码配置,即可实现数据表的对比,不...
如果2个像素彼此之间的差异大于pixelToleranceLevel (以下描述的此配置),则视为“不同”。 比较的输出是actual图像的副本。 差异用红色矩形概述,如下所示。 没有使用第三方库或借用的代码。 图像的某些部分...
它们的配置文件有细微的差异,最好是一次能够生产所有环境的war包. 比较常见的是设置application.properties中的spring.profiles.active环境变量 但是yml的精简特性很值得称道,用过之后就不能忍受property 文件的臃肿...
MyBatis提供了定制化SQL、存储过程以及高级映射的支持,它要求开发者手动编写SQL语句,并使用注解或XML文件进行配置。相比之下,MyBatis Plus则提供了更为丰富的功能,如自动注入基本CRUD操作、强大的条件构造器、...
例如,用户登录后,按一下“Alt+ F2”键,用户就可以看到上面出现的“login:”提示符,说明用户看到了第二个虚拟控制台。然后只需按“Alt+ F1”键,就可以回到第一个虚拟控制台。一个新安装的Linux系统允许用户使用...
用来对文件或目录进行比较和合并的工具,KDiff3是一款用来对文件或目录进行比较/合并的工具,在比较时它可以同时针对两个或者三个文件/目录而进行。通过比较,它将文件/目录的差异按行加以显示。同时,KDiff3 提供有...
与配置文件中的YAML集合进行比较时,可以忽略某些表和/或字段(请参见文件示例) 差异非常快速,并且该工具已经在具有数百万行的多个表的数据库中进行了测试 由于此差异工具用于迁移,因此它在同一文件中提供上下...
不多说废话,看题目,本教程适合练手,会python+android基础的人群,文件较大,上传乃是下载链接,下面上目录: 1-1 课程导学 2-1 如何学好Android App性能测试? 2-10 详解【电量】监控值的获取方法 \' D, l" p) ...
4.10.1. 文件差异 4.10.2. 行结束符和空白选项 4.10.3. 比较文件夹 4.10.4. 使用 TortoiseIDiff 进行比较的图像 4.10.5. Diffing Office Documents 4.10.6. 其他的比较/合并工具 4.11. 添加新文件和目录 4.12. 复制/...
•比较工具用来指出两个配置文件的差异 用于网络监控的移动应用 •MXview ToGo移动应用可用于远程监控和通知-随时随地 •使用二维码进行现场设备的智能识别,可提高操作效率 •Device Locator(设备定位器)配备...
自动化代码基准测试解决方案。 为开发人员提供跟踪和分析项目绩效的工具。 介绍 什么是Codebench? Codebench是运行用户定义的基准程序,监视系统信息并生成报告的工具。 在git跟踪的项目中使用时...配置文件 厌倦了
该模块的目的是创建和显示系统配置的差异,两个不同系统实例的cms块和cms页面。 该模块通过Magento API扩展请求与之进行比较的已配置参考系统的系统数据。 它保存所有差异,并可以在系统配置中显示它们。 在那里,您...
配置文件/配置选项 执行器选项... 引擎选项... 监控方式 输出DESeq2结果 离线工作 帮助信息 引文 快速安装 管道使用Nextflow编写,可以在任何POSIX兼容系统(Linux,OS X等)上使用。 WSL支持Windows系统。 您...
FortiADC和FortiGate配置文件可能非常长,很难在长时间的配置会话中发现(或忘记)任何更改。 FortiGate已经在GUI中包含了一个类似的工具,但是在FortiADC中尚无此工具(在撰写本文时)。 当参与配置或检查...
5.21.2 显示供应商(其它操作的配置办法相同) 103 5.21.3 定义与采购组织特定的屏幕格式 105 5.22 设置物料冻结 SPRO 110 设置发票校验的物料冻结 SPRO 111 5.23 维护外部物料组 SPRO 112 5.24 创建采购订单的...
为用户帐号分配一个配置文件 创建帐户时变量的使用 创建随机初始化口令 理解内建组(Built-in Group) 理解组和策略 设置主组(Primary Group) 理解删除一个组的影响 域控制器(Domain Controller)简介 成员服务器...