我想比较2个或更多(如果可行).properties文件,正好是i18n文件。 所以我有默认的messages_es.properties,其中我首先使用值添加键,我真正需要的是仅将default / primary messages_es.properties的键与其他.properties文件(例如messages_en.properties)进行比较,以了解哪些翻译留在不同的.properties文件中。
基本上:
O / P应该显示第二个.properties文件中缺少的键。
答案 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;
}