Java 从.txt文件读取数据并创建对象数组
我需要一些帮助:我正在用java做一个飞行花名册模拟。该名册将容纳25名乘客,其中22名来自文本文件(PassengerList.txt)。每名乘客需要3个数据点;姓名、座位等级和座位#以及2个可选数据点常客号码和常客积分。每个乘客都在自己的线路上,每个数据点用逗号分隔。例如:Java 从.txt文件读取数据并创建对象数组,java,arrays,Java,Arrays,我需要一些帮助:我正在用java做一个飞行花名册模拟。该名册将容纳25名乘客,其中22名来自文本文件(PassengerList.txt)。每名乘客需要3个数据点;姓名、座位等级和座位#以及2个可选数据点常客号码和常客积分。每个乘客都在自己的线路上,每个数据点用逗号分隔。例如: Allen George,Economy Class,8A,#GEO456,10000 Judy Hellman,Economy Class,8B 到目前为止,我有这个类以及构造函数: public class Pas
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
我需要做的是从文本文件中读取每一行并创建数组,即使第一行看起来像这样:
Passenger passenger1 = new Passenger ("Allen George","Economy Class","8A"
,"#GEO456",10000)
Passenger[0] = passenger1;
进入如下数组:
Passenger passenger1 = new Passenger ("Allen George","Economy Class","8A"
,"#GEO456",10000)
Passenger[0] = passenger1;
我显然是一个java初学者,但我已经被这个问题困扰了很长时间,当我尝试新的东西时,我不断收到一条又一条错误消息。我一直在用扫描仪读取文件。文本文件不需要被覆盖,只需由程序读取和扫描即可。也只能使用数组,ArrayList是不可能的。也只有两个文件,乘客等级和主要方法。请帮忙!谢谢大家! 您可以按以下步骤操作: 首先你需要一个乘客舱。它看起来像这样(注意,我添加了一个toString(): } 现在,为了从文件中获取乘客详细信息,我创建了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]));
}
}
公共类GetPassengerDetails{
/**一次读取一行文件。每行将被拆分并转换为乘客对象*/
公共列表getPassengersFromFile(BufferedReader读取器)引发IOException{
列表乘客=新的ArrayList();
弦线;
而((line=reader.readLine())!=null){
字符串[]passengerDetails=line.trim().split(“,”);
乘客=新乘客();
for(int i=0;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());
}
}
}
公共类主{
公共静态void main(字符串[]args)引发IOException{
String fileName=“resources/passengers.csv”;
BufferedReader reader=新的BufferedReader(新文件读取器(文件名));
GetPassengerDetails passengerDetails=新的GetPassengerDetails();
List Passenger=passengerDetails.getPassengersFromFile(读卡器);
//为了测试的目的,我们让乘客
乘客:乘客
) {
System.out.println(passenger.toString());
}
}
}
运行main方法后,您将得到以下结果:
使用此主要方法从文本文件读取数据并将数据聚合到乘客对象。乘客列表对象中的整个乘客列表
public static void main(String[] args) {
List<Passengers> passengersList = new ArrayList<Passengers>();
File file = new File("Your file location..");
try {
BufferedReader br = new BufferedReader(new FileReader(file));
String st;
while ((st = br.readLine()) != null){
String[] data = st.split(",");
String flyNumber = null;
int flyPoints = 0;
switch (data.length){
case 4: flyNumber = data[3];
break;
case 5: flyNumber = data[3];
flyPoints = Integer.valueOf(data[4]);
break;
}
Passengers passenger = new Passengers(data[0], data[1], data[2], flyNumber, flyPoints);
passengersList.add(passenger);
}
System.out.println(passengersList.get(0));
} catch (IOException e) {
e.printStackTrace();
}
}
publicstaticvoidmain(字符串[]args){
List PassengerList=新建ArrayList();
文件=新文件(“您的文件位置”);
试一试{
BufferedReader br=新的BufferedReader(新文件读取器(文件));
字符串st;
而((st=br.readLine())!=null){
字符串[]数据=st.split(“,”);
字符串flyNumber=null;
int flyPoints=0;
开关(数据长度){
案例4:flyNumber=数据[3];
打破
案例5:flyNumber=数据[3];
飞点=整数.valueOf(数据[4]);
打破
}
乘客=新乘客(数据[0]、数据[1]、数据[2]、航班号、飞行点);
乘客列表。添加(乘客);
}
System.out.println(passengersList.get(0));
}捕获(IOE异常){
e、 printStackTrace();
}
}
为什么要用javascript标记?@OldProgrammer这是我的错,我是新来的lolI我不确定数组是否适合你。为什么它需要是数组?我认为你最好把它作为乘客列表。所以你可以将文件读入如下列表:list pasengers=new ArrayList()
@magerine为了我的缘故,我只想保持它的简单。我可以用。toArray将它转换回来,对吗?非常感谢!有没有办法将它分解为两个文件(仅乘客类和主要方法)?我不缺感谢,这些文件非常清晰简洁!谢谢!