编写程序,在提示文件名后读取文件

时间:2018-10-18 15:46:27

标签: java exception input methods output

我现在正在尝试学习输入/输出,我很难过。目前,我在学习书中进行一个特定的练习,我应该编写一个程序来读取包含两列浮点数的文件,提示用户输入文件名,然后打印每列的平均值。

这主要是最简单的方法吗,还是应该将其安排到方法中?到目前为止,这是我想出的:

/**
 * @param args
 */
public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    System.out.println("Enter the File Name: ");
    String fileNameReading = in.next();
    in.close();

    try {
        getAverage(fileNameReading);
    } catch (IOException e) {
        e.printStackTrace();
    }

}

    private static void getAverage(String fileNameReading1) throws IOException {

    double firstColumnSum = 0;  //Skapar summa för den första kolumnen
    double secondColumnSum = 0; //Skapar summa för den andra kolumen
    int allRows = 0; //Skapar summa för antalet rader

    while (in.hasNextLine()) {
        String[] row = in.nextLine().split("\\s+"); //Skapar arrayen rows 
        firstColumnSum += Double.parseDouble(row[0]);
        secondColumnSum += Double.parseDouble(row[1]);
        allRows++;
    }

    double row1 = firstColumnSum / allRows;
    double row2 = secondColumnSum / allRows;

    in.close();

     System.out.printf("Medelvärdet på den första kolumnen är: %.2f\n",row1);
     System.out.printf("Medelvärdet på den andra kolumnen är: %.2f\n", row2);

    }

目前的问题是扫描仪无法工作,因为它使用的不是main方法,该如何使用?

2 个答案:

答案 0 :(得分:0)

这应该有效

package org.test; 
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;

public class readFile {

public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    System.out.println("Enter the File Name: ");
    String fileNameReading = in.next();
    in.close();

    try {
        getAverage(fileNameReading);
    } catch (IOException e) {
        e.printStackTrace();
    }

}


private static void getAverage(String fileNameReading) throws IOException {
    FileInputStream fis;
    try {
        fis = new FileInputStream(fileNameReading);
         InputStreamReader input = new InputStreamReader(fis);
            BufferedReader br = new BufferedReader(input);
            String data;
            double avg = 0;
             String[] doublearray = null;


            while ((data = br.readLine()) != null) {
                doublearray = data.split(" "); // assuming the file contains only one line like x y , x and y are doubles
            }
            if(doublearray!= null && doublearray.length>0){
            avg = (Double.parseDouble(doublearray[0])+Double.parseDouble(doublearray[1]))/2;
            }

            System.out.println("The Average of Double values is : "+avg);


    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
   }
}

答案 1 :(得分:0)

仅在getAverage()循环之前将这些行放在while中,以便您启动一个新的Scanner来读取文件的内容:

    File file = new File(fileNameReading1);

    Scanner in = null;

    try {
        in = new Scanner(file);
    } catch (FileNotFoundException e) {
        System.out.println("File not found");
        e.printStackTrace();
        return;
    }

编辑,此行:

in = new Scanner(file);


  

构建一个新的扫描仪,该扫描仪生成从   指定的文件。


(来自Scanner.java)
因此,in扫描程序对象将用于获取文件的行。