从.txt文件中读取输入时遇到严重问题

时间:2015-11-08 23:01:18

标签: java

在我的编程课程中,我们正在学习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;    
    }
}

1 个答案:

答案 0 :(得分:3)

Java经常提供一个很好的反馈,当你学习这门语言时,乍看之下并不总是很容易注意到:)

引用您的问题:

  

每次运行时,catch块都是唯一运行的部分

提供反馈,表示正在捕获类FileNotFoundException的异常 - 发生错误并且try-catch阻止应用程序崩溃。

documentation的摘录说会抛出此异常:

  1. 当具有指定路径名的文件不存在时
  2. 如果文件存在但由于某种原因无法访问,它也会被抛出
  3. 所以在这种情况下,代码执行过程中的上述一个是100%

    在捕获到异常后,程序继续进行并且代码为:

    for(int i=0;inputStream.hasNextLine();i++)
    

    使程序崩溃,因为变量inputStream没有赋值,并且对未分配变量调用方法可能会为您提供另一个异常。

    我希望我的答案有助于并且在java路径上一路顺风:)