Java读取文件类不创建arraylist

时间:2015-11-27 21:43:44

标签: java java.util.scanner

我正在尝试使用存储在文本文件中的数据填充ArrayList,数据是由空格分隔的5个不同值,以及布尔值,字符串和整数的混合。另外,我正在使用BlueJ,不确定这是否会改变。

从文件中读取数据时,应根据该数据创建Room类型的对象

我是Java的新手,我刚刚开始在过去几周内学习它,我的阅读数据类如下:

房间数据类:

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;
   }
   }

ReadDataClass:

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

1 个答案:

答案 0 :(得分:1)

首先创建一个类l2 <- list(a = c(1,-2), 2,7,0,45,78,89,90,2,-1) Reduce(min, l) # [1] -2 来保存每个房间的数据,并为每个变量赋予一个有意义的名称以及相应的类型。

将您的arraylist更改为保留该类型而不是RoomData

String

使用s.nextLine()

读取每一行
private List<RoomData> list = new ArrayList<>();

创建该类的实例split,并将每个值解析为您创建的while(s.hasNext()) { String nextLine = s.nextLine(); RoomData roomData = new RoomData(); 实例中的相应变量。

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中定义的类型,对于int,您可以使用{{3}对于boolean,有一个类似的方法(Boolean.parseBoolean(String s))[Integer.parseInt(String s),可以直接设置字符串值。

将该实例添加到arraylist。

RoomData

添加getter方法以返回该列表以供在其他类中使用。

    list.add(roomData);

} // end of while