Java 读取文件 Class 未创建数组列表
Java Read File Class not creating arraylist
我正在尝试用存储在文本文件中的数据填充 ArrayList,数据是 5 个不同的值,用白色 space 分隔,混合了布尔值、字符串和整数。另外,我正在使用 BlueJ,但不确定这是否会改变任何东西。
从文件中读取数据时,应根据该数据创建 Room 类型的对象
我是Java新手,最近几周才开始学习,阅读数据class如下:
房间数据Class:
public class RoomData
{
//Default Values of a Room
private int roomNumber = 0;
private int bookingNights = 0;
private boolean hasEnSuite = false;
private boolean isBooked = false;
private String bookingName = "<None>";
public void setRoomNumber(int roomNumber)
{
this.roomNumber = roomNumber;
}
public void setBookingNights(int bookingNights)
{
this.bookingNights = bookingNights;
}
public void setHasEnSuite()
{
this.hasEnSuite = hasEnSuite;
}
public void setIsBooked()
{
this.isBooked = isBooked;
}
public void setBookingName()
{
this.bookingName = bookingName;
}
}
读取数据Class:
public class ReadHotelData
{
private String filePath;
public ReadHotelData()
{
filePath = "hotelData.txt";
}
private List<RoomData> list = new ArrayList <>();
public boolean hasNext() throws FileNotFoundException
{
Scanner s = new Scanner(new File("hotelData.txt"));
while (s.hasNext())
{
String nextLine = s.nextLine(); //reads text file line by line
RoomData roomData = new RoomData();
String[] values = nextLine.split(" "); // splits the text file by white space
roomData.setRoomNumber(Integer.parseInt(values[0]));
roomData.setBookingNights(Integer.parseInt(values[1]));
roomData.setHasEnSuite(Boolean.parseBoolean(values[2]));
roomData.setIsBooked(Boolean.parseBoolean(values[3]));
roomData.setBookingName(String.parseString(values[4]));
list.add(roomData);
}// end loop
s.close();
return true;
}
public List <RoomData> getRoomDataList()
{
return list;
}
}
就像我说的,我是新手,所以如果我遗漏了什么,我将非常感谢任何帮助!
文本文件中存储的数据示例:
0 false David 0 false
0 true John 0 false
0 false Jim 0 true
首先创建一个 class RoomData
来保存每个房间的数据,并为每个变量指定一个有意义的名称以及适当的类型。
更改数组列表以保留该类型而不是 String
private List<RoomData> list = new ArrayList<>();
读取每一行
while(s.hasNext())
{
String nextLine = s.nextLine();
RoomData roomData = new RoomData();
创建 class、split 的实例,并将每个值解析为您创建的 RoomData
实例中的相应变量。
String[] values = nextLine.split(" ") // split by space
// lets say you have "0 false David 0 false"
// values[0] would be "0"
// values[1] would be "false"
// values[2] would be "David"
// values[3] would be "0"
// values[4] would be "false"
values
中的所有值都是 String
类型,您需要将这些值从 String 转换为您在 RoomData
中定义的类型,对于 int,您可以使用 Integer.parseInt(String s), for boolean there is a similar method (Boolean.parseBoolean(String s))[http://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html#parseBoolean-java.lang.String-],可以直接设置字符串值。
将该实例添加到数组列表中。
list.add(roomData);
} // end of while
将 getter 方法添加到 return 该列表以供在其他 class 中使用。
public List<RoomData> getRoomDataList() {
return list;
}
我正在尝试用存储在文本文件中的数据填充 ArrayList,数据是 5 个不同的值,用白色 space 分隔,混合了布尔值、字符串和整数。另外,我正在使用 BlueJ,但不确定这是否会改变任何东西。
从文件中读取数据时,应根据该数据创建 Room 类型的对象
我是Java新手,最近几周才开始学习,阅读数据class如下:
房间数据Class:
public class RoomData
{
//Default Values of a Room
private int roomNumber = 0;
private int bookingNights = 0;
private boolean hasEnSuite = false;
private boolean isBooked = false;
private String bookingName = "<None>";
public void setRoomNumber(int roomNumber)
{
this.roomNumber = roomNumber;
}
public void setBookingNights(int bookingNights)
{
this.bookingNights = bookingNights;
}
public void setHasEnSuite()
{
this.hasEnSuite = hasEnSuite;
}
public void setIsBooked()
{
this.isBooked = isBooked;
}
public void setBookingName()
{
this.bookingName = bookingName;
}
}
读取数据Class:
public class ReadHotelData
{
private String filePath;
public ReadHotelData()
{
filePath = "hotelData.txt";
}
private List<RoomData> list = new ArrayList <>();
public boolean hasNext() throws FileNotFoundException
{
Scanner s = new Scanner(new File("hotelData.txt"));
while (s.hasNext())
{
String nextLine = s.nextLine(); //reads text file line by line
RoomData roomData = new RoomData();
String[] values = nextLine.split(" "); // splits the text file by white space
roomData.setRoomNumber(Integer.parseInt(values[0]));
roomData.setBookingNights(Integer.parseInt(values[1]));
roomData.setHasEnSuite(Boolean.parseBoolean(values[2]));
roomData.setIsBooked(Boolean.parseBoolean(values[3]));
roomData.setBookingName(String.parseString(values[4]));
list.add(roomData);
}// end loop
s.close();
return true;
}
public List <RoomData> getRoomDataList()
{
return list;
}
}
就像我说的,我是新手,所以如果我遗漏了什么,我将非常感谢任何帮助!
文本文件中存储的数据示例:
0 false David 0 false
0 true John 0 false
0 false Jim 0 true
首先创建一个 class RoomData
来保存每个房间的数据,并为每个变量指定一个有意义的名称以及适当的类型。
更改数组列表以保留该类型而不是 String
private List<RoomData> list = new ArrayList<>();
读取每一行
while(s.hasNext())
{
String nextLine = s.nextLine();
RoomData roomData = new RoomData();
创建 class、split 的实例,并将每个值解析为您创建的 RoomData
实例中的相应变量。
String[] values = nextLine.split(" ") // split by space
// lets say you have "0 false David 0 false"
// values[0] would be "0"
// values[1] would be "false"
// values[2] would be "David"
// values[3] would be "0"
// values[4] would be "false"
values
中的所有值都是 String
类型,您需要将这些值从 String 转换为您在 RoomData
中定义的类型,对于 int,您可以使用 Integer.parseInt(String s), for boolean there is a similar method (Boolean.parseBoolean(String s))[http://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html#parseBoolean-java.lang.String-],可以直接设置字符串值。
将该实例添加到数组列表中。
list.add(roomData);
} // end of while
将 getter 方法添加到 return 该列表以供在其他 class 中使用。
public List<RoomData> getRoomDataList() {
return list;
}