Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Read and store file content in a double array

Tags:

java

I need to write a program that reads and stores an inputted file in Java in a double array. The number of values in the file is stored in the first line of the file, then the actual data values follow.

Here is what I have so far:

public static void main(String[] args) throws FileNotFoundException
{
    Scanner console = new Scanner(System.in);
    System.out.print("Please enter the name of the input file: ");
    String inputFileName = console.next();

    Scanner in = new Scanner(inputFileName);

    int n = in.nextInt();
    double[] array = new double[n];

    for( int i = 0; i < array.length; i++)
    {
        array[i] = in.nextDouble();
    }

    console.close();
}

Input File is as follows:

10
43628.45
36584.94
76583.47
36585.34
86736.45
46382.50
34853.02
46378.43
34759.42
37658.32

As of now, regardless of the file name I input, I am getting an exception message:

Exception in thread "main" java.util.InputMismatchException
    at java.util.Scanner.throwFor(Unknown Source)
    at java.util.Scanner.next(Unknown Source)
    at java.util.Scanner.nextInt(Unknown Source)
    at java.util.Scanner.nextInt(Unknown Source)
    at Project6.main(Project.java:33)
like image 453
coscdummy Avatar asked Jun 28 '15 04:06

coscdummy


2 Answers

new Scanner(String) constructor scans the specified String. Not the file denoted by the pathname in the string.

If you want to scan the file, use

Scanner in = new Scanner(new File(inputFileName));
like image 147
Codebender Avatar answered Nov 03 '22 07:11

Codebender


Check the following code. Scanner must be provided with File instead of just String as shown in the following snippet:

public class Main {
    public static void main(String[] args) {
        Scanner console = new Scanner(System.in);
        System.out.print("Please enter the name of the input file: ");
        String inputFileName = console.nextLine();

        Scanner in = null;
        try {
            in = new Scanner(new File(inputFileName));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

        int n = in.nextInt();
        double[] array = new double[n];

        for (int i = 0; i < array.length; i++) {
            array[i] = in.nextDouble();
        }
        for (double d : array) {
            System.out.println(d); 
        }
        console.close();
    }
}

Sample output:

Please enter the name of the input file: c:/hadoop/sample.txt
43628.45
36584.94
76583.47
36585.34
86736.45
46382.5
34853.02
46378.43
34759.42
37658.32

like image 37
KDP Avatar answered Nov 03 '22 09:11

KDP