java方法读取文件并返回avg

时间:2015-02-06 18:27:36

标签: java file

我正在编写一个名为fileAverage的公共静态方法,它接受一个String,它是文件的绝对路径。该文件是一个带有实数的简单文本文件。我需要使用try catch来处理该文件。我的catch块应该打印出有关异常的信息,我的方法不应该抛出异常。我的方法他们应该返回一个双倍的文件的平均值。

到目前为止,这是我的代码:

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;


public class Problem2 {

    public static final String filePath = "/Users/rderickson9/Desktop/CS2/fileAverage.txt";

    public static double fileAverage(String filePath){
        int total = 0;
        double fin = 0.0;
        double avg = 0;

        File file = new File(filePath);
        try {
            Scanner sc = new Scanner(file);
            while(true){
                String nextLine = sc.nextLine();
                if(nextLine.equals("")){
                    break;
                }
                double doubleTemp = Double.parseDouble(nextLine);
                fin = fin + doubleTemp;

                total++; 
            }
            avg = (fin/total);
            System.out.println(avg);
        } catch (FileNotFoundException ex) {
            Logger.getLogger(Problem2.class.getName()).log(Level.SEVERE, null, ex);
        }


        return avg;
    }
    public static void main(String[] args) {
        fileAverage(filePath);

    }
}

我并没有真正关注如何设置它,所以我的方法将运行

文件示例

3.2
4.7
2003
2.3
25

2 个答案:

答案 0 :(得分:1)

您可以使用Scanner class直接从文件中获取double,就像这样

while (sc.hasNextLine()) {
 double doubleTemp = sc.nextDouble();
 fin += doubleTemp; //short hand operator
  total++; 
 }
avg = (fin/total);
System.out.println(avg);

答案 1 :(得分:0)

这是Java 8解决方案:

List<String> l = new LinkedList<>();
try (Scanner sc = new Scanner(file)) {
   sc.useDelimiter("\\v").forEachRemaining(l::add);        
   l.stream().mapToInt(Integer::parseInt).average().ifPresent(System.out::println);
} catch (FileNotFoundException e) {
   e.printStackTrace();
}