用Java编写/读取文件

时间:2015-03-06 13:09:12

标签: java io

我正在进行一项任务,无法使用此方法为文件生成正确的输出。我应该得到平均值并将其写入文件。它们是StatsDemo类和StatsFile类。我是Java的初学者,所以我想要一点帮助。我在StatsFile类中的方法目前是这样的:

//returns the calculated arithmetic average
public double calculateMean(String filename) throws FileNotFoundException
{
    // declare variables step 5
    double accumulator = 0.0;
    int counter =0;
    String line;
    try{
    File input = new File(filename);
    //create a Scanner object passing it the File object
    Scanner keyboard = new Scanner(input);
    //for (int i = 0; i < input.length(); i++){
         // Read a double from the file.
    while(keyboard.hasNextDouble()){
         accumulator += keyboard.nextDouble();

         // Add to counter
         counter++;
    }
    keyboard.close();


}catch(FileNotFoundException e){
    }
    return (accumulator/counter);
}

演示就是这样:

import java.util.Scanner;
import java.text.DecimalFormat;
import java.io.*;
public class StatsDemo {

    public static void main(String[] args) throws FileNotFoundException  {
        // TODO Auto-generated method stub

        DecimalFormat threeDec  = new DecimalFormat("0.000");
        Scanner keyboard = new Scanner(System.in);

        String filename; // the user input file name

        System.out.print("Enter the file name: ");
        filename = keyboard.nextLine();


        FileStats fileObj = new FileStats(filename); 

        try{
            PrintWriter name = new PrintWriter("Results.txt");
            name.println("mean = " + threeDec.format(fileObj.getMean()));
            name.println("Standard Deviation = " + threeDec.format(fileObj.getStdDev()));

            name.close();
        }catch(IOException e){
            System.out.println("Error");
        }
    }
}

捕获和抛出仍然让我感到困惑。我的问题是,当我打开文件时,它当前给我一个问号而不是平均值。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

如果在try块中发生异常,则控制跳转到catch块。您应该考虑在这种情况下应该发生什么。您可以纠正问题并继续;您可能希望查看问题并重新抛出和异常,或者您可能希望让调用者处理问题。在最后一种情况下,您根本不需要捕获,您只需要在方法声明中使用throws

捕捉异常并无所事事很少是一个好主意,因为问题只是被忽略了。请记住,代码流将在catch子句之后继续,除非抛出另一个异常,因此如果该文件不存在,您仍将处理return (accumulator/counter)行,这不是您想要的。

查看你的代码,你的方法已经抛出了一个FileNotFoundException,所以只需删除try和catch。