2011-10-28 28 views
0

我有一堆我正在寫一個文件的字符串:無法寫入新的生產線,以文件

private void writeScoreToFile(BlastScore result) 
    { 
     try{ 
      FileWriter fstream = new FileWriter(getFilesDir() + CaptureActivity.BLAST_SCORES,true); 
      BufferedWriter out = new BufferedWriter(fstream); 
      out.write(Integer.toString(result.getBlastScore())); 
      out.close(); 
     }catch (Exception e){ 
      System.err.println("Write Error: " + e.getMessage()); 
     } 
    } 

我想讀回在一個列表。

private List<String> getArrayFromFile(String filename) throws IOException 
    { 
     FileReader fileReader = new FileReader(getFilesDir() + filename); 
     BufferedReader bufferedReader = new BufferedReader(fileReader); 
     List<String> lines = new ArrayList<String>(); 
     String line = null; 
     while ((line = bufferedReader.readLine()) != null) { 
      lines.add(line); 
     } 
     bufferedReader.close(); 
     return lines; 
    } 

正在寫入的名單是:

100 
96 
100 
96 
100 

當我打印的清單看起來

10-28 21:22:31.130: I/System.out(936): Last Score: 1009610096100 

這裏是我使用的打印代碼:

try { 
      List<String> blastScores = getArrayFromFile(CaptureActivity.BLAST_SCORES); 
      System.out.println("Last Score: " + blastScores.get(blastScores.size()-1)); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      System.err.println("Read Error: " + e.getMessage()); 
     } 

我試圖讓n-1個元素噸。

我不知道我在做什麼錯。

回答

0

在編寫整數或整數字符串時,不會在每次輸出後放置新的換行符。因此,你的文件只有一行數據,你得到的是一個連續的字符串...... 要修復,請在單獨的write()調用之間添加一行分隔符,如write.newLine()。

0

其寫入成績代碼使用

out.write(Integer.toString(result.getBlastScore())); 

這意味着,如果該方法被調用得分12,100和2,你的文件看起來像

121002 

,因爲你不」寫任何分隔符。你想如何正確解析這三個數字?

使用PrintWriter包裝BufferedWriter,並使用其println方法來寫分數。

請注意,通過打開文件並每次關閉分數來逐個寫入分數不會很快。順便說一句,使用BufferedWriter只寫一個整數不會帶來任何好處。你也有不好的異常處理:流和讀寫器應該總是在finally塊中關閉。

0

在你的writeScoreToFile函數中,我看不到任何新行或任何分隔符,它們將分隔每個正在寫入的分數。

在這種情況下,您的文件實際上將包含1009610096100在單行和內部getArrayFromFile循環將只執行一次:

while ((line = bufferedReader.readLine()) != null) { 
    lines.add(line); 
} 

因此您List<String>只包含1個元素與碼blastScores.get(blastScores.size()-1)將得到最後和只有元素,明顯是1009610096100