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

3
目前在我的编程课程中,我们正在学习I/O流。不幸的是,我的老师已经决定不来过去的两个实验室,并取消了最后一次讲座,使得我的班级和我需要自己学习基本的I/O流知识完成我们最新的任务。
我们的最新任务是从文本文件“ListOfAirlines.txt”中读取信息,并将其存储在三个不同的类(Location、Designator和Airline)中。Airline类应该有Location类和Designator类的对象。
问题在于我的程序似乎不想从文件中读取输入。以下是我迄今为止的程序代码,虽然还没有完成,但我尝试测试目前已完成的部分以查看它是否有效。每次运行时,try之后的catch块是唯一运行的部分,尽管我输入的是确切的文件名。我还收到一个运行时错误,说在第39行(循环开始的地方)有问题。我真的不知道我在做什么,大多数时间我只是在尝试根据书中的例子编写这个特定的程序。
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()方法位于我们所需的input类下。它只是询问用户要求文件名,然后将其存储在一个字符串中。

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;    
    }
}

enterFileName()在哪里?你能分享一下吗? - Alexander
2
文件位置有时可能看起来有些奇怪... 尝试使用以下代码查找程序正在查找文件的位置:System.out.println(new File(file).getAbsolutePath()) ... 在循环中出现错误的原因是扫描程序无法创建并且输入流为空。它不能在空值上调用hasNextLine。 - Numeron
顺便说一句:我建议你正确缩进你的代码。这可以在大多数开发程序中轻松完成。例如,在Eclipse中,只需按下Shit + Alt + F即可。这使得代码更易读,更容易理解。 - Frithjof
1
你的问题写得很好,表现出了你的努力,但对于其他遇到相同问题的人来说并不是非常有用。你能否编辑一下你的问题(缩短长度,去掉关于学校的部分),并且修改标题(明确描述问题),以便描述一个你正在遇到的独立问题? - snickers10m
1个回答

3

Java通常会给出很好的反馈,但当你学习这门语言时,有时不容易一下子注意到它 :)

引用你的问题:

每次运行它时,只有catch块被执行

这说明捕获了FileNotFoundException类的异常——发生错误,try-catch块防止应用程序崩溃。

文档中提取的内容表明,将引发此异常:

  1. 指定路径名的文件不存在时
  2. 如果该文件确实存在,但由于某种原因无法访问,则也将抛出该异常

因此,在这种情况下代码执行期间会发生上述情况之一,概率为100%

在捕获异常后,程序继续执行,并执行以下代码行:

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

如果变量inputStream没有被赋值,那么调用未赋值变量的方法可能会导致程序崩溃。

希望我的回答能够帮到你,祝你在Java之路上一帆风顺 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接