这是我的代码。我必须在不使用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;
}
}
答案 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++;
}
当伯特问他是否想要冰淇淋时,厄尼说了什么?
当然是伯特。