2013-05-19 41 views
-1

我有查找特定單詞之間座標的代碼。 現在,輸出到控制檯完美的作品,但像輸出發現FILE 我當前的代碼比賽ID:java(matcher.group()) - 寫入文件

public class Filetostring { 


public static void main(String[] args) throws FileNotFoundException, IOException { 
    String s = new Scanner(new File("input.txt")).useDelimiter("\\Z").next(); 
//System.out.println(content); 


    Pattern patt; 
    patt = Pattern.compile("\\bworld\\b|\\bsolid\\b|.(-?\\d+\\s-?\\d+\\s-?\\d+\\)\\s\\  (-?\\d+\\s-?\\d+\\s-?\\d+\\)\\s\\(-?\\d+\\s-?\\d+\\s-?\\d+)."); 
    Matcher matcher = patt.matcher(s); 
while(matcher.find()) 
//System.out.println(matcher.group()); 


try (FileWriter file2 = new FileWriter("output.txt"); 
     BufferedWriter bf = new BufferedWriter(file2)) { 
     bf.write(matcher.group()); 
} 

     System.out.println("Done"); 

} 

     } 

輸出應該是

世界

固體

(3245 )(2334)(-234)

(457)(2)(2323)

代替,當我輸出到文件中,只有第一COORDS出現:

(3245)(2334)(-234)

回答

2

作爲寫,你通過while循環的每次通過打開相同的文件。每個FileWriter/BufferedWriter組合將寫入一行輸出。沒有人關閉過。當他們最終被釋放時,這將是一個猜測遊戲,最後關閉哪一個被覆蓋,覆蓋所有其他輸出。

嘗試在try內移動while循環,之後創建BufferedWriter。完成後關閉bf(在finally區塊會很好)。

+0

謝謝,這工作。唯一的問題是輸出在一行中 – r3aktormk

+0

嘗試使用PrintWriter及其'println'方法。請參閱http://docs.oracle.com/javase/6/docs/api/java/io/PrintWriter.html –

+0

這很棒! (matcher.find()) bf.println(matcher.group());這個函數返回一個新的PrintWriter(file2)。 bf.close(); – r3aktormk