2015-10-26 129 views
1

我有一個包含.csv文件替換:CSV:搜索字符串並用另一個字符串

scenario, custom, master_data 
1,  ${CUSTOM}, A_1 

我有一個字符串:

a, b, c 

,我想,以取代「定製」與'a,b,c'。我該怎麼做,並保存到現有的.csv文件?

+0

一般情況下,您不保存到現有的'.csv'文件 - 保存到臨時文件,然後用它替換舊文件。 – RealSkeptic

回答

0

也許最簡單的方法是在一個文件中,並輸出讀取到另一個文件,當您去,修改它在每行的基礎

你可以嘗試用斷詞什麼的,這可能不是你完全正確輸入/輸出,但可以將其調整到您的CSV文件格式

BufferedReader reader = new BufferedReader(new FileReader("input.csv")); 
BufferedWriter writer = new BufferedWriter(new FileWriter("output.csv")); 
String custom = "custom"; 
String replace = "a, b, c"; 

for(String line = reader.readLine(); line != null; line = reader.readLine()) 
{ 
    String output = ""; 
    StringTokenizer tokenizer = new StringTokenizer(line, ","); 
    for(String token = tokenizer.nextToken(); tokenizer.hasMoreTokens(); token = tokenizer.nextToken()) 
     if(token.equals(custom) 
      output = "," + replace; 
     else 
      output = "," + token; 
} 
readInventory.close(); 

如果這是一次性的東西,它也有不必研究正則表達式(這是非常強大的和有用的利益,很高興知道,但也許以後呢?)

0

由於您的替換字符串非常獨特,因此您可以快速完成該任務,無需通過將文件讀入緩衝區,然後將該緩衝區轉換爲字符串來進行復雜的解析。將您希望替換的所有文本替換爲您的目標文本。然後將字符串轉換爲緩衝區並將其寫回文件...

Pattern.quote是必需的,因爲您的字符串是正則表達式。如果你不引用它,你可能會遇到意想不到的結果。

另外,覆蓋源文件通常不太智能。最好的辦法是創建一個新文件,然後刪除舊文件,並將新文件重命名爲舊文件。任何中途的錯誤將不會刪除您的所有數據。

final Path yourPath = Paths.get("Your path"); 
byte[] buff = Files.readAllBytes(yourPath); 
String s = new String(buff, Charset.defaultCharset()); 
s = s.replaceAll(Pattern.quote("${CUSTOM}"), "a, b, c"); 
Files.write(yourPath, s.getBytes());