我正在编写一个名为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
答案 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();
}