在我的编程课程中,我们正在学习I / O流。不幸的是,我的老师已经决定不去过去的两个实验室,并取消了上一次的讲座,让我的班级和我自己学习我们最新作业的I / O流的基础知识。
对于我们最新的作业,我们将从文本文件中读取信息" ListOfAirlines.txt
"并将它们存储在三个不同的类(位置,指示符和航空公司)中。 Airline类具有Location和Designator类的对象。
问题是我的程序似乎并不想读取文件中的输入。这是我目前为止的程序代码。它没有完成,但我尝试测试我到目前为止只是为了看它是否有效。每次运行它时,尽管我键入了确切的文件名,但catch块是唯一可以运行的部分。我还得到一个运行时错误,说第39行存在问题(for循环开始的地方)。我真的不知道我在做什么,而且我大多只是试图在我的书中关注这个特定的程序。
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class AirlineOutput {
public static void storeInfo() {
AirlineInput object = new AirlineInput();
String file = AirlineInput.enterFileName();
Scanner inputStream = null;
try {
inputStream = new Scanner(new File(file));
} catch (FileNotFoundException z) {
System.out.println("Error opening the file "+file);
}
/*
* The following creates an array for every object in the program.
* It cycles through the input stream assigning each line to a String variable.
* The String variables are then passed through to their respective object classes.
* The Location and Designator objects are passed to the airline object as the
* airline object is required to contain it's own Location and Designator objects.
*/
for (int i = 0; inputStream.hasNextLine(); i++) {
Airline[] airline = new Airline[i];
airline[i]=new Airline();
Designator[] designator = new Designator[i];
designator[i]=new Designator();
Location[] location = new Location[i];
location[i]=new Location();
String stringRead = inputStream.nextLine();
Scanner parse = new Scanner(stringRead);
String airlineName = parse.next();
String designators = parse.next();
String frequentFlyerProgram = parse.next();
String city = parse.next();
String state = parse.next();
String country = parse.next();
String website = parse.next();
location[i].setCity(city);
location[i].setCountry(country);
location[i].setState(state);
airline[i].setLocation(location[i]);
designator[i].setDesignators(designators);
airline[i].setDesignators(designator[i]);
airline[i].setName(airlineName);
airline[i].setWebsite(website);
airline[i].setFrequentFlyer(frequentFlyerProgram);}
inputStream.close();
}
}
}
<。> .enterFileName()位于我们需要的输入类之下。只是向用户询问文件名,然后将其存储在字符串中。
import java.util.Scanner;
public class AirlineInput {
static String file;
public AirlineInput() {
}
public static String enterFileName() {
System.out.println("Enter the file name: ");
Scanner keyboard=new Scanner(System.in);
file=keyboard.next();
return file;
}
}
答案 0 :(得分:3)
Java经常提供一个很好的反馈,当你学习这门语言时,乍看之下并不总是很容易注意到:)
引用您的问题:
每次运行时,catch块都是唯一运行的部分
提供反馈,表示正在捕获类FileNotFoundException
的异常 - 发生错误并且try-catch阻止应用程序崩溃。
documentation的摘录说会抛出此异常:
所以在这种情况下,代码执行过程中的上述一个是100%。
在捕获到异常后,程序继续进行并且代码为:
for(int i=0;inputStream.hasNextLine();i++)
使程序崩溃,因为变量inputStream
没有赋值,并且对未分配变量调用方法可能会为您提供另一个异常。
我希望我的答案有助于并且在java路径上一路顺风:)