COMPARE 2或更多.PROPERTIES文件比较ONLY键

时间:2017-05-04 08:20:57

标签: java properties compare file-comparison

我想比较2个或更多(如果可行).properties文件,正好是i18n文件。 所以我有默认的messages_es.properties,其中我首先使用值添加键,我真正需要的是仅将default / primary messages_es.properties的键与其他.properties文件(例如messages_en.properties)进行比较,以了解哪些翻译留在不同的.properties文件中。

基本上:

  • 输入:两个属性文件
  • 输出:第二个.properties文件中缺少键

O / P应该显示第二个.properties文件中缺少的键。

3 个答案:

答案 0 :(得分:1)

班级Properties有方法

public synchronized void load(InputStream inStream)
public synchronized void load(Reader reader)

您可以使用它们加载文件。

然后使用方法

public Set<String> stringPropertyNames()

获取一组属性。

最后Set有方法

boolean retainAll(Collection<?> c)
boolean removeAll(Collection<?> c)

处理差异。

答案 1 :(得分:0)

如果有人还在寻找答案,我实现了下面的代码

public class PropertiesCompare {

 public static void main(String[] args) {

    String propertiesFilename1 = System.getProperty("PropFile1");
    String propertiesFilename2 = System.getProperty("PropFile2");

    Map<String, String> PropFile1 = getProps(propertiesFilename1);
    Map<String, String> PropFile2 = getProps(propertiesFilename2);

    String missingProp = "";

    for (Map.Entry<String, String> entry : PropFile1.entrySet()) {
        if (PropFile2.containsKey(entry.getKey())) {
            String PropFile2Value = (PropFile2.get(entry.getKey()));
            String PropFile1Value = (entry.getValue());

            if (!PropFile2Value.equalsIgnoreCase(PropFile1Value)) {
                 System.out.println("Key : "+entry.getKey()+"\t\nValue : PropFile1 = "+PropFile1Value+", PropFile2 = "+PropFile2Value);
            }
        } else {
            missingProp= missingProp+(entry.getKey() + " = " + entry.getValue() + "\n");
        }
    }
}

public static Map<String, String> getProps(String propertiesFilename1) {
    Map<String, String> properties = new HashMap<>();
    try (InputStream stream = new FileInputStream(propertiesFilename1)) {
        Properties prop = new Properties() {
            @Override
            public synchronized Object put(Object key, Object value) {
                return properties.put(key.toString(), value.toString());
            }
        };
        prop.load(stream);
    } catch (IOException e) {
        e.printStackTrace();
    }
    return properties;
 }
}

答案 2 :(得分:-1)

示例(非常简单)

String filename1 = args[0];
String filename2 = args[1];
try {
  System.out.println("Load " + filename1);
  Properties prop1 = loadProperties(filename1);
  Properties prop2 = loadProperties(filename2);

  Set<String> proprietes1 = prop1.stringPropertyNames();
  Set<String> proprietes2 = prop2.stringPropertyNames();
  proprietes1.removeAll(proprietes2);
  System.out.println("Propriétés de " + filename1 + " qui ne sont pas dans " + filename2);
  for (String prop : proprietes1) {
    System.out.println(prop);
  }
} catch (FileNotFoundException | IOException e) {
  System.out.println(usage);
  e.printStackTrace();
} 

位置:

public static Properties loadProperties(String filename1) throws FileNotFoundException, IOException {
  Properties prop = new Properties();
  BufferedReader reader = new BufferedReader(new FileReader(filename1));
  prop.load(reader);
  return prop;
}