2012-05-07 62 views
4

我讀了幾個屬性文件,將它們與模板文件中的缺失鍵進行比較。在讀寫文件時避免出現換行符( n)

FileInputStream compareFis = new FileInputStream(compareFile); 
Properties compareProperties = new Properties(); 
compareProperties.load(compareFis); 

注:我以相同的方式讀取模板文件。

閱讀後,我比較它們,並將它們的值從模板文件中寫入丟失的密鑰到一個集合。

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」。

有誰知道我該如何避免這種情況?

回答

2

由於看起來您的輸出是一個屬性文件,您應該使用Properties.store()來生成輸出文件。這不僅會考慮對新行字符進行編碼,還會處理其他特殊字符(例如,非ISO8859-1字符)。

+0

謝謝JB Nizet答案(最好的,我認爲)。這工作! –

0

你需要的東西是這樣的:

"test.key=Hello\\nWorld!" 

其中"\\n"實際上是\n

0

在序列化之前將\ n脫出。如果你打算讀取你輸出的文件,你的閱讀代碼將需要知道逃跑。

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(); 
    } 
} 
0

你也可以看看Apache Commons StringEscapeUtils.escapeJava(String)。

1

一個實例添加到使用Properties.store()

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(); 
相關問題