【问题标题】:Reading data from a file to an object?从文件中读取数据到对象?
【发布时间】:2012-05-07 23:09:42
【问题描述】:

好的,关于我正在编写的名为“Flight”的程序的另一个问题。在我的测试器中,我正在从名为 myFlight 的 Flight 类创建一个对象。该对象有几个字段(航班名称、行驶里程等),但我正在做的是从名为 input.txt 的文件中读取数据并尝试将其放入我创建的对象中。我正在阅读的文件有五行信息。由于某种原因,我不能完全正确,如果有人可以帮助我解决这个问题,我将不胜感激。

这是包含我的 Flight 类中所有字段的构造函数:

 public Flight(String name, int num, int miles, String origin, String destination)
  {
    Airlinename = name;
    flightnumber = num;
    numofmiles = miles;
    Origincity = origin;
    Destinationcity = destination;
  }

以及我创建对象并尝试从文件中读取数据的程序部分。我也在我的类中创建了一个空白构造函数,因为我不确定在创建对象时是否应该在对象中放入任何东西。

Flight myFlight = new Flight();

    File myFile = new File("input.txt");
    Scanner inputFile = new Scanner(myFile);

    while (inputFile.hasNext())
    {
      myFlight = inputFile.nextLine();
    }

    inputFile.close();
  }
}

【问题讨论】:

  • 如果回答有帮助...您可以accept it
  • 你能提供你的txt文件是什么样子的吗?

标签: java filereader


【解决方案1】:

以防万一您使用特殊字符,您需要修改您的程序以便正确阅读它们。

Scanner inputFile = new Scanner(myFile, "UTF-8");

另一方面,如果文本文件包含以下内容,则对nextInt() 的后续调用可能会生成运行时异常。

Gran España
1
1001
New York
Los Angeles

如果是这样,读数应该不同。

myFlight = new Flight(inputFile.nextLine(), 
           Integer.parseInt(inputFile.nextLine()), 
           Integer.parseInt(inputFile.nextLine()), 
           inputFile.nextLine(), 
           inputFile.nextLine());

与任何程序一样,当添加更多条件来改进模型时,它需要越来越多的代码。

祝你好运。

【讨论】:

    【解决方案2】:

    试试

    myFlight = new Flight(inputFile.next(), inputFile.nextInt(), 
               inputFile.nextInt(), inputFile.next(), inputFile.next());
    

    【讨论】:

    • 它一直告诉我找不到文件(input.txt)?
    • 检查文件是否与java程序在同一目录下。
    【解决方案3】:

    不能直接将字符串行赋值给对象,需要将行解析成部分,逐个赋值给变量。

    【讨论】:

      【解决方案4】:

      您的输入文本是如何组织的? Scanner 的nextLine() 方法返回一个String 对象,您绝对不能将其分配给Flight 类型。有不同的方法可以在 Scanner 中获取不同的值,例如 nextInt(), nextFloat()

      基本上你可以这样尝试

      Flight myFlight = new Flight();
      myFlight.setFlightName(inputFile.next());
      myflight.setMiles(inputFile.nextInt();
      

      等等

      这只是一个示例,您需要检查 input.txt 文件中的格式。

      【讨论】:

      • 这是我的输入文件的样子(都在不同的行):American Airlines 56 Chicago New York 780
      • 基本上您可以将输入文本格式化为不同的格式,例如美国航空公司|56|芝加哥|纽约|780,分隔符是管道符号。由于使用空格分隔可能无法为您提供正确的值,因为航空公司是“美国航空公司”,假设如果您使用空格分隔,您将无法获得整个名称。现在您可以在docs.oracle.com/javase/1.5.0/docs/api/java/util/… 处查看 Scanner 类 API 文档以获取更多信息。
      • 如果您将每个项目放在不同的行中,则您的文件仅包含一个或多个航空公司详细信息。如果多个,那么你如何区分一个记录的结尾。如果每一行是一个记录,那么您可以按照我告诉的方式使用分隔符进行格式化,以便获得一个 Flight 实例数组,每个实例代表文件中的一行。希望有帮助
      • 好的,所以它现在似乎可以工作,它可以编译,但现在当我运行它时,我收到一个错误,即找不到文件。我的文件名正确,它保存在我的计算机上的记事本文件中,名称为 input.txt 有什么想法吗?
      • 检查文件的路径。如果您将文件放在运行 java 程序的同一位置,那么它将拾取它,否则您需要在创建 new File() 时提供路径
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-26
      • 2015-08-14
      • 1970-01-01
      相关资源
      最近更新 更多