1  import java.io.File;
  2  import java.io.FileNotFoundException;
  3  import java.io.EOFException;
  4  import java.io.IOException;
  5  import java.util.Scanner;
  6  import java.util.NoSuchElementException;
  7  
  8  /**
  9     This program processes a file containing a count followed by data values.
 10     If the file doesn't exist or the format is incorrect, you can specify another file.
 11  */
 12  public class DataAnalyzer
 13  {
 14     public static void main(String[] args)
 15     {
 16        Scanner in = new Scanner(System.in);
 17  
 18        // Keep trying until there are no more exceptions
 19  
 20        boolean done = false;
 21        while (!done) 
 22        {
 23           try 
 24           {
 25              System.out.print("Please enter the file name: ");
 26              String filename = in.next();
 27              
 28              double[] data = readFile(filename);
 29  
 30              // As an example for processing the data, we compute the sum
 31  
 32              double sum = 0;
 33              for (double d : data) { sum = sum + d; }
 34              System.out.println("The sum is " + sum);
 35  
 36              done = true;
 37           }
 38           catch (NoSuchElementException exception)
 39           {
 40              System.out.println("File contents invalid.");
 41           }
 42           catch (FileNotFoundException exception)
 43           {
 44              System.out.println("File not found.");
 45           }
 46           catch (IOException exception)
 47           {
 48              exception.printStackTrace();
 49           }
 50        }
 51     }
 52  
 53     /**
 54        Opens a file and reads a data set.
 55        @param filename the name of the file holding the data
 56        @return the data in the file
 57     */
 58     public static double[] readFile(String filename) throws IOException
 59     {
 60        File inFile = new File(filename);
 61        Scanner in = new Scanner(inFile);
 62        try 
 63        {
 64           return readData(in);
 65        }
 66        finally
 67        {
 68           in.close();
 69        }
 70     }
 71  
 72     /**
 73        Reads a data set.
 74        @param in the scanner that scans the data
 75        @return the data set
 76     */
 77     public static double[] readData(Scanner in) throws IOException
 78     {      
 79        int numberOfValues = in.nextInt(); // May throw NoSuchElementException
 80        double[] data = new double[numberOfValues];
 81  
 82        for (int i = 0; i < numberOfValues; i++)
 83        {
 84           data[i] = in.nextDouble(); // May throw NoSuchElementException
 85        }
 86  
 87        if (in.hasNext()) 
 88        {
 89           throw new IOException("End of file expected");
 90        }
 91        return data;
 92     }
 93  }