我怎样才能摆脱这个错误:错误:未报告的异常FileNotFoundException;

时间:2013-08-29 01:31:05

标签: java arrays file

这是我的代码。我必须在不使用FileNotFoundException类的情况下编写它。代码从包含数组信息的文件中读取。我收到了这个错误:

F:\FanClub.java:59: error: unreported exception FileNotFoundException; must be caught or declared to be thrown
    Scanner inputFile = new Scanner(file);

由于

import java.util.Scanner;               
import java.util.ArrayList;

import java.io.*;

public class FanClub
{
    private static Scanner keyboard = new Scanner(System.in);

    public static void main(String[] args) throws IOException
    {
        final int NUM_FANS = 100;
        int numFans = 0;
        int[] ages = new int[NUM_FANS];

        String[] names = new String[NUM_FANS];

        numFans = fillArrays(names, ages, NUM_FANS);
    }

    public static int fillArrays(String[] names, int[] ages, int NUM_FANS)
    {
        int counter = 0;
        System.out.print("Enter the file name: ");
        String fileName = keyboard.nextLine();

        File file = new File(fileName);
        Scanner inputFile = new Scanner(file);

        if (!file.exists())
        {
            System.out.println("File " + fileName + " not found.");
            System.exit(0);
        }

        int[] numFans = new int[NUM_FANS];

        while (inputFile.hasNext() && counter < numFans.length)
        {
            numFans[counter] = inputFile.nextInt();
            counter++;
        }
        inputFile.close();
        return counter;
    }
}

2 个答案:

答案 0 :(得分:0)

尝试改为:

File file = null;

try
{
    file = new File(fileName);
    Scanner inputFile = new Scanner(file);
}
catch(IOException ioe) // should actually catch FileNotFoundException instead
{
    System.out.println("File " + fileName + " not found.");
    System.exit(0);
}

答案 1 :(得分:0)

正如我在评论中尝试解释的那样,您正在以错误的顺序阅读文件。你说你的文件是这样的:

Chris P. Cream 5 Scott Free 9 Lou Tenant 3 Trish Fish 12 Ella Mentry 4 Holly Day 3 Robyn DeCradle 12 Annette Funicello 4 Elmo 7 Grover 3 Big Bird 9 Bert 7 Ernie 3

你只是调用inputFile.nextInt(),它试图读取一个int,但是"Chris P. Cream" 不是一个int,这就是为什么你得到输入不匹配的例外。首先,您需要阅读该名称,然后您可以阅读该号码。

现在,由于不清楚你的文本文件是如何分隔的(它只是在一行上),这就产生了一个问题,因为名字可以是一个,两个,甚至三个单词,后跟一个数字。你仍然可以这样做,但是你需要一个正则表达式来告诉它读取这个数字。

while (inputFile.hasNext() && counter < numFans.length)
{
    names[counter] = inputFile.findInLine("[^\\d]*").trim();
    numFans[counter] = inputFile.nextInt();
    System.out.println(names[counter] + ": " + numFans[counter]);
    counter++;
}

但是,如果您的文件实际上是这样格式化的(单独的行):

Chris P. Cream 
5 
Scott Free 
9 
Lou Tenant 
3 
Trish Fish 
12 
Ella Mentry 
4 
Holly Day 
3 
Robyn DeCradle 
12 
Annette Funicello 
4 
Elmo 
7 
Grover 
3 
Big Bird 
9 
Bert 
7 
Ernie 
3

然后你很幸运,因为你可以这样做(不需要正则表达式):

while (inputFile.hasNext() && counter < numFans.length)
{
    names[counter] = inputFile.nextLine();
    numFans[counter] = inputFile.nextInt();
    if (inputFile.hasNext())
        inputFile.nextLine(); // nextInt() will read a number, but not the newline after it
    System.out.println(names[counter] + ": " + numFans[counter]);
    counter++;
}

当伯特问他是否想要冰淇淋时,厄尼说了什么?

当然是伯特。