当前位置: 首页 > 知识库问答 >
问题:

从.txt文件读取数据并创建对象数组

阳凌
2023-03-14

我需要一些帮助:我正在做一个在Java的飞行花名册模拟。名册将容纳25名乘客,其中22名来自文本文件(passengerlist.txt)。对于每个乘客,有3个必需的数据点;姓名、座位等级和座位号和2个可选数据点数常旅客号码和常旅客点数。每个乘客都在自己的线路上,每个数据点都用逗号隔开。例如:

Allen George,Economy Class,8A,#GEO456,10000
Judy Hellman,Economy Class,8B

我有这个类,到目前为止还有构造函数:

public class Passengers
{

  private String name, type, seat, flyernum;
  private int points;

  //Constructor to intialize the instance data
  Passengers(String full_name, String seat_type, String seat_number,
  String frequent_flyer_number, int frequent_flyer_points) 
  { 
    name=full_name;
    type=seat_type;
    seat=seat_number;
    flyernum=frequent_flyer_number;
    points=frequent_flyer_points;
  } //end Passengers 

我需要做的是从文本文件中读取每一行并创建数组,即使第一个look行看起来如下所示:

Passenger passenger1 = new Passenger ("Allen George","Economy Class","8A" 
,"#GEO456",10000)

成一个数组,如下所示:

Passenger[0] = passenger1;

我显然是一个Java初学者,但我已经在这方面赶上了这么长时间,我不断得到不同的错误消息,当我尝试一些新的东西。我一直在用扫描仪读取文件。文本文件不需要覆盖,只需由程序读取扫描即可。也只能使用数组,ArrayList是不允许的。也只有两个文件,乘客类和main方法。请救命!谢谢!

共有1个答案

贺刚毅
2023-03-14

你可以按以下方式来做:

首先你需要一个乘客。它看起来像这样(注意,我添加了一个toString():

public class Passenger {

private String name, type, seat, flyernum;
private int points;

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getType() {
    return type;
}

public void setType(String type) {
    this.type = type;
}

public String getSeat() {
    return seat;
}

public void setSeat(String seat) {
    this.seat = seat;
}

public void setFlyernum(String flyernum) {
    this.flyernum = flyernum;
}

public int getPoints() {
    return points;
}

public void setPoints(int points) {
    this.points = points;
}

@Override
public String toString() {
    return "Passenger{" +
            "name='" + name + '\'' +
            ", type='" + type + '\'' +
            ", seat='" + seat + '\'' +
            ", flyernum='" + flyernum + '\'' +
            ", points=" + points +
            '}';
}

}

现在,为了从文件中获取乘客的详细信息,我创建了getPassengerDetails.class,它处理从CSV文件中读取数据并为每个乘客分配正确的值。

public class GetPassengerDetails{
/** Reads the file one line at a time. Each line will is that split up and translated into a Passenger object */
public List<Passenger> getPassengersFromFile(BufferedReader reader) throws IOException {
    List<Passenger> passengers = new ArrayList<>();

    String line;
    while ((line = reader.readLine()) != null) {
        String[] passengerDetails = line.trim().split(",");
        Passenger passenger = new Passenger();
        for (int i = 0; i < passengerDetails.length; i++) {

            SetPassengerName(passengerDetails, passenger, i);

            setPassengerFlightType(passengerDetails, passenger, i);

            setPassengerSeatNumber(passengerDetails, passenger, i);

            SetPassengerFlyerNumber(passengerDetails, passenger, i);
            setPassengerPoints(passengerDetails, passenger, i);
        }

        passengers.add(passenger);

    }

    return passengers;
}

private void setPassengerPoints(String[] passengerDetails, Passenger passenger, int i) {
    if(i< passengerDetails.length && i == 4) {
        passenger.setPoints(Integer.parseInt(String.valueOf(passengerDetails[4])));
    }
}

private void SetPassengerFlyerNumber(String[] passengerDetails, Passenger passenger, int i) {
    if(i< passengerDetails.length && i == 3) {
        passenger.setFlyernum(String.valueOf(passengerDetails[3]));
    }
}

private void setPassengerSeatNumber(String[] passengerDetails, Passenger passenger, int i) {
    if(i< passengerDetails.length && i == 2) {
        passenger.setSeat(String.valueOf(passengerDetails[2]));
    }
}

private void setPassengerFlightType(String[] passengerDetails, Passenger passenger, int i) {
    if(i< passengerDetails.length && i == 1) {
        passenger.setType(String.valueOf(passengerDetails[1]));
    }
}

private void SetPassengerName(String[] passengerDetails, Passenger passenger, int i) {
    if(i< passengerDetails.length & i == 0) {
        passenger.setName(String.valueOf(passengerDetails[i]));
    }
}

}

下面是测试上述代码的主要方法:

public class Main {

public static void main(String[] args) throws IOException {

      String fileName = "resources/passengers.csv";

    BufferedReader reader = new BufferedReader(new FileReader(fileName));
    GetPassengerDetails passengerDetails = new GetPassengerDetails();

    List<Passenger> passengers = passengerDetails.getPassengersFromFile(reader);

    // For Testing Purposes lets get the Passengers

    for (Passenger passenger : passengers
            ) {
        System.out.println(passenger.toString());
    }
  }
}   

运行main方法后,这是您将得到的结果:

 类似资料:
  • 问题内容: 我需要一些帮助:我正在用Java进行超市仿真,但是有一个问题,我有一个文本文件(Stock.txt),例如,我在上面有所有的超市库存: 0-面包巧克力蛋糕-$ 12.5-250 1-Meat-Premium Steak- $ 2.6-120 2海鲜金枪鱼-1.2-14美元 … 第一个数字是产品的“ id”,第二个是产品所属的部门,第三个是产品名称,第二个是价格,最后一个数字是库存的产品

  • 所以,我试图让我的程序从文本文件中读入一个结构数组,它编译得很好,但看起来并没有真正读入值?...我不知道为什么。这是代码的相关部分: 这是txt文件(标题:Planets.txt) 水星120 50 500 12.1 30 2金星120 50 500 29.1 30 6地球120 50 500 32.2 30 7月亮120 15 50 5.3 30 2火星120 50 500 12.2 30 4

  • 问题内容: 如何从.txt文件读取和显示数据? 问题答案: 然后,您可以使用in.readLine(); 一次读取一行。要读到最后,可以这样编写while循环:

  • 在我的main(一个名为VehicleDriverClass的seperate类)中,我试图使用I/O将车辆数据写入文件,并从文件中读取车辆数据。我可以写一个文件罚款。我正在使用记事本和一个。txt文件来读取。我遇到的问题是,当从文件中读取时,如何终止一行的结尾。这里是Vehicle类的构造函数,所以您知道Paramaters。 这就是我目前的输入法(不试图创建oject,只是从文件中读取)。传递

  • 我在用Pandas将。txt文件转换为浮动值的数据目录时遇到了麻烦。我需要创建两列数据的散点图,但我一直得到错误“TypeError:Empty'DataFrame':no numeric data to plot”,所以我认为它是以字符串的形式读取数据。 下面是我运行df.info时得到的结果 列u_Vmag和u_B-V中没有任何测量值。 我觉得我只是错过了一些显而易见的东西。有人有什么建议吗?

  • 问题内容: 无论如何,我可以写到tempfile并将其包含在命令中,然后关闭/删除它。我想执行命令,例如:some_command / tmp / some-temp-file。 提前谢谢了。 问题答案: 如果需要带有名称的临时文件,则必须使用该功能。然后就可以使用了。有关详细信息,请阅读 http://docs.python.org/library/tempfile.html。