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包在附件
相关推荐
在IT领域,文件差异对比(也称为文件比较或文件同步)是日常工作中不可或缺的一个环节。这个过程涉及到查找并分析两个或多个文件之间的不同之处,或者是两个文件夹内相同结构文件的差异。这样的功能广泛应用于代码...
这些工具允许用户比较不同版本的代码、配置文件或其他文本文件,以便快速识别出差异并进行必要的修改。标题中的"代码,配置文件,版本对比工具"正是指的这类软件应用,它们在协同开发、版本控制、配置管理等方面发挥...
1. **连接数据库**:脚本首先会建立到两个要比较的MySQL数据库的连接,通常通过配置文件设置数据库的地址(如IP或域名)、端口、用户名、密码和数据库名。 2. **获取表信息**:连接成功后,脚本会查询每个数据库中的...
总而言之,Python运维自动化在nginx配置文件的对比操作中,涉及到文件的读取、遍历、比较等操作技巧,可以通过difflib模块轻松实现,也可以结合在线工具完成。掌握这些技巧对于提升运维效率和准确性都有很大的帮助。...
"bin文件对比工具"是专门用于比较两个bin文件差异的软件,这对于固件开发、系统调试以及数据恢复等工作至关重要。本文将深入探讨bin文件的性质、bin文件对比的必要性以及Fairdell HexCmp2这款工具的功能与使用。 ...
9. **版本控制集成**:如果配置文件中包含了版本控制系统(如Git或SVN)的集成设置,用户可以直接在Source Insight中进行版本控制操作,如提交、回滚、比较差异等。 10. **扩展功能**:某些高级配置可能还包括插件...
4. manifest比较:AndroidManifest.xml是APK的核心配置文件,对比两个版本的manifest可以揭示权限、服务、活动等组件的变更。 5. 字节码分析:如果包含.dex文件的对比,工具可能还能识别出代码层面的差异,例如方法...
通过定制`codereview`,你可以设置代码审查的提示、注释样式、差异对比选项等,帮助团队成员更有效地进行代码审核,发现潜在的错误和不规范之处。 **3. quicker配置** `quicker`配置文件通常包含快捷键设置和自定义...
2. 图像对比度:比较两张图片差异的基本方法是计算它们之间的相似度或差异度。常用的指标有像素级的差分绝对值(Mean Squared Error, MSE)、结构相似度指数(Structural Similarity Index, SSIM)等。 3. 图像处理...
- **`MyDiff()`函数**:这是一个自定义函数,用于在比较或合并文件差异时提供更灵活的选项。它根据`diffopt`选项调整差异处理参数,并根据系统环境变量和shell类型(如Windows的`cmd.exe`)动态构造差异处理命令。此...
在这个压缩包"配置比较器.rar"中,包含了一个名为"配置比较器.exe"的可执行文件,这可能是一个独立的应用程序,用户可以直接运行来比较配置文件。使用时,用户可能需要导入待比较的配置文件,然后软件会自动分析并...
这个工具不仅限于代码文件,还可以处理任何纯文本文件,如配置文件、文档或日志。kdiff3的特色在于其可视化界面,可以清晰地显示不同文件之间的差异,并允许用户交互式地合并这些差异。 ### 主要功能特性 1. **...
标题中的"fc.rar_FC_dos fc_文件差异_文件比较"暗示了我们关注的焦点是DOS操作系统中的fc命令,它是一个用于比较两个文本文件或二进制文件的实用程序,用于找出它们之间的差异。fc不仅可以帮助用户检查文件内容是否...
在Linux for ARM环境中,配置文件比对工具是一个非常重要的实用程序,它可以帮助系统管理员和开发者在不同的设备或系统之间比较和分析配置文件的差异。这些工具可以用来确保更新、升级或者迁移过程中的配置一致性,...
在提供的压缩文件"比较两表差异,并生成差异数据.mdb"中,可能包含一个已经配置好的Access数据库,演示了如何进行两表比较并生成差异数据的过程。打开这个数据库,你将看到预设的表和可能的VBA代码示例。 六、注意...
2. 二进制比较:适用于图片、音频、视频等非文本文件,通常以颜色编码的方式展示差异。 3. 目录比较:比较两个目录的结构和内容,找出新增、删除、修改的文件。 4. 表格比较:用于比较Excel表格或其他结构化的数据...
标题中的“文件对比工具 对比项目文件”指出,这款工具专注于对项目文件进行对比,这可能包括源代码、配置文件、文档等,确保版本间的差异一目了然。 描述中提到的功能更进一步地揭示了工具的核心特性。首先,用户...
标题中的“免安装的文件差异比对工具”指的是一个无需经过传统安装步骤即可使用的软件,这类工具通常以可执行文件的形式提供,用户可以直接运行而无需安装到系统中,避免了在计算机上留下冗余文件或注册表条目,这...
SQLCompare.ini可能是配置文件,里面包含了用户的设置信息,如连接参数、默认比较选项等。用户可以通过修改这个文件来定制工具的行为,以满足特定的需求或适应不同的工作环境。 SQLCompare.Core.dll则很可能包含了...