2014-05-25 31 views
0

我不斷收到bufferedreader中的錯誤消息,並在最後收到異常。我現在已經呆了三天了。如果有人可以請告訴我什麼即時通訊做錯了,並告訴我如何解決我的代碼將大大優於。我試圖讓一個文件讀入一個數組列表,並計算出平均值並打印出Arraylist的內容和平均值。

package week07; 


import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.util.ArrayList; 
import java.util.List; 

import javax.swing.JFileChooser; 


public class Week07 { 


    public static void main(String args[]) throws IOException 
    { 

     { 
      JFileChooser chooser = new JFileChooser(); 
      int result = chooser.showOpenDialog(null); 
     //check result 
      File file = chooser.getSelectedFile(); 
     } 
     // Use DataInputStream to read binary NOT text. 
     BufferedReader br = new BufferedReader(new FileReader(file)); 

     String strLine; 
     List<Double> numbers= new ArrayList<Double>(); 

     //Read File Line By Line 
     while ((strLine = br.readLine()) != null) { 
     // Add number from file to list 
     numbers.add(parseDecimal(strLine)); 
     } 
     //Close the input stream 
     ((BufferedReader) numbers).close(); 

     System.out.println(numbers); 
    }catch (Exception e){ 
     e.printStackTrace(); 
    } 


private static Double parseDecimal(String strLine) { 
    // TODO Auto-generated method stub 
    return null; 
} 
} 
+0

你不能施放清單BufferReader只是改變它br.close –

+0

我改變,但相同的錯誤消息不斷傳來了 – user3670665

+0

的趕上(例外五){現在唯一扔我一條錯誤消息。我不知道它要我做什麼 – user3670665

回答

1
((BufferedReader) numbers).close(); 

你怎麼能強制轉換ListBufferedReader,然後調用close()就可以了。顯然你會得到例外。將其更改爲br.close(),並在具有空檢查的finally塊中執行。

0

使用Java-8,您可以通過減少大量樣板代碼來實現您的目標。看下面的步驟。

  1. 文件讀入到BufferedReader

    BufferedReader reader= new BufferedReader(new FileReader(file)); 
    
  2. 文件轉換到行流String

    Stream<String> lineStream=reader.lines(); 
    
  3. 讀入List<Double>

    List<Double> numbers =lineStream.map(p-> Double.valueOf(p)) 
              .collect(Collectors.toList()); 
    
  4. 計算平均從List<Double>

    double average = numbers.stream().mapToDouble(p->p).average().getAsDouble(); 
    
  5. 顯示輸出。

    System.out.println(average);