我正在尝试将文件读入arraylist,并计算平均值并打印出Arraylist的内容和平均值。

时间:2014-05-25 05:46:10

标签: java arraylist

我不断收到bufferedreader中的错误消息以及最后的catch异常。我已经在这三天了。如果有人可以请你告诉我我做错了什么,并告诉我如何修复我的代码,这将是非常令人遗憾的。

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;
}
}

2 个答案:

答案 0 :(得分:1)

((BufferedReader) numbers).close();

如何将List类型转换为BufferedReader,然后在其上调用close()。显然你会得到例外。将其更改为br.close(),最好在finally块中进行,并使用空检查。

答案 1 :(得分: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);