0

这是我的代码。我必须在不使用 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;
    }
}
4

2 回答 2

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);
}
于 2013-08-29T01:59:54.387 回答
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++;
}

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

当然伯特。

于 2013-08-29T02:12:24.620 回答