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<>();

使用s.nextLine()

读取每一行
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;
}