我读了几个属性文件,将它们与缺少密钥的模板文件进行比较。
FileInputStream compareFis = new FileInputStream(compareFile);
Properties compareProperties = new Properties();
compareProperties.load(compareFis);
注意:我以相同的方式阅读模板文件。
阅读后,我比较它们,并将缺少的密钥与模板文件中的值一起写入Set。
CompareResult result = new CompareResult(Main.resultDir);
[...]
if (!compareProperties.containsKey(key)) {
retVal = true;
result.add(compareFile.getName(), key + "=" + entry.getValue());
}
最后,我将缺失的密钥及其值写入新文件。
for (Entry<String, SortedSet<String>> entry : resultSet) {
PrintWriter out = null;
try {
out = new java.io.PrintWriter(resultFile);
SortedSet<String> values = entry.getValue();
for (String string : values) {
out.println(string);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
out.flush();
out.close();
}
}
如果我打开结果文件,我会看到模板文件的值中的所有换行符“\ n”都替换为新行。例如:
test.key=Hello\nWorld!
变为
test.key=Hello
World!
虽然这基本上是正确的,但在我的情况下,我必须保留“\ n”。
有谁知道我怎么能避免这种情况?
答案 0 :(得分:2)
由于您的输出似乎是属性文件,因此应使用Properties.store()生成输出文件。这不仅会处理换行符的编码,还会处理其他特殊字符(例如非ISO8859-1字符)。
答案 1 :(得分:1)
使用println
将使用特定于平台的行终止符结束每一行。您可以改为明确地编写您想要的行终止符:
for (Entry<String, SortedSet<String>> entry : resultSet) {
PrintWriter out = null;
try {
out = new java.io.PrintWriter(resultFile);
SortedSet<String> values = entry.getValue();
for (String string : values) {
out.print(string); // NOT out.println(string)
out.print("\n");
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
out.flush();
out.close();
}
}
答案 2 :(得分:1)
FileInputStream compareFis = new FileInputStream(compareFile);
Properties compareProperties = new Properties();
compareProperties.load(compareFis);
....
StringBuilder value=new StringBuilder();
for (Entry<String, SortedSet<String>> entry : resultSet) {
SortedSet<String> values = entry.getValue();
for (String string : values) {
value.append(string).append("\n");
}
}
compareProperties.setProperty("test.key",value);
FileOutputStream fos = new FileOutputStream(compareFile);
compareProperties.store(fos,null);
fos.close();
答案 3 :(得分:0)
你需要这样的东西:
"test.key=Hello\\nWorld!"
"\\n"
实际上是\n
。
答案 4 :(得分:0)
在序列化之前转义\ n。如果您打算阅读输出文件,您的阅读代码将需要知道转义。
答案 5 :(得分:0)
您还可以查看Apache Commons StringEscapeUtils.escapeJava(String)。