2015-11-08 46 views
3

在编程课程中,我们正在学习I/O流。不幸的是,我的老师决定不去过去的两个实验室,并且已经取消了最后一次讲座,离开了我的班级和我自己学习I/O流的基础知识,以供我们最近的作业。从.txt文件读取输入存在严重问题

对于我们的最新作业,我们将从文本文件“ListOfAirlines.txt”中读取信息,并将它们存储在三个不同类(位置,指示符和航空公司)中。航空公司班级要有位置和指示员班的对象。

问题是我的程序好像不想读取文件中的输入。这是我迄今为止的程序代码。它没有完成,但我试着测试我到目前为止只是为了看看它是否有效。每次运行它时,尽管我输入了确切的文件名,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

'enterFileName()'在哪里?你能分享一下吗? – Alexander

+2

有时文件位置可能会显得有点奇怪......试试这个来找出程序在哪里查找文件System.out.println(新文件(文件))。getAbsolutePath())'......在循环中出现错误的原因是因为扫描器无法创建并且inputstream为空。它不能在空值上调用hasNextLine。 – Numeron

+0

顺便说一句:我会建议你正确缩进你的代码。这可以使用大多数开发程序轻松完成。例如在eclipse中,它就是Shit + Alt + F。这使得代码更易读,更容易被大家理解。 – Frithjof

回答

3

的Java往往给人一种preety良好的反馈,这是不容易的第一眼,当你学习:)

引用你的问题的语言注意:

我每次运行它,catch块是唯一运行的部分

哪给出反馈exc正在捕获FileNotFoundException类的错误 - 错误发生,try-catch块阻止应用程序崩溃。

documentation提取物说,这将引发异常:

  1. 当指定路径名的文件不存在
  2. 如果文件不存在,也将被抛出,但由于某些原因不可访问的时代码

因此,在这种情况下,上述一个执行发生100%

异常后,被抓获的程序进行,并符合代码:

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

使程序崩溃,因为变量inputStream没有指定值,并呼吁未分配变量的方法可能提供了另一个异常。

我希望我的回答对java路径有帮助和一路顺风:)