我想根据基本项目的一部分从文本文件加载数据。例如。文本文件如下所示:
201,double,70.00,2,own bathroom
202,single,50.00,2,own bathroom
每条数据都用逗号分隔,在这种情况下按顺序进行:房间号,房间类型,费用,人数,有无浴室,每个房间有5个数据,每个房间的信息是在新行上。
下面的代码分别读取每一行,但是如何获取并读取并存储该行中的每个数据/单词(显然没有逗号)?
try{
BufferedReader reader = new BufferedReader(new FileReader("test.txt"));
String line = reader.readLine();
while (line != null){
System.out.println(line);
line = reader.readLine();
}
reader.close();
} catch(IOException ex){
System.out.println(ex.getMessage());
}
我看到了一个使用扫描仪的示例,但听说它速度较慢且效率较低。
我也尝试使用split,但是我不知道如何正确地做到这一点。
谢谢。
答案 0 :(得分:2)
您可以用逗号,
分隔行并获取值数组:
try{
BufferedReader reader = new BufferedReader(new FileReader("test.txt"));
String line = reader.readLine();
String data[] = null;
while (line != null){
System.out.println(line);
line = reader.readLine();
data = line.split(","); //data will have the values as an array
}
reader.close();
} catch(IOException ex){
System.out.println(ex.getMessage());
}
答案 1 :(得分:1)
您可以使用Files.readAllLines()
方法并将数据映射到专用对象。假设您拥有带有适当构造函数的Room
对象,则可以读取和存储数据,如:
List<String> strings = Files.readAllLines(Paths.get("test.txt"));
List<Room> rooms = new ArrayList<>();
for (String line : strings) {
String[] split = line.split(",");
Integer roomNumber = Integer.valueOf(split[0]);
String roomType = split[1];
Double roomCost = Double.valueOf(split[2]);
Integer amount = Integer.valueOf(split[3]);
String bathroom = split[4];
Room r = new Room(roomNumber, roomType, roomCost, amount, bathroom);
rooms.add(r);
}
然后,您可以通过房间号获取某个房间的信息:
Room room = rooms.stream()
.filter(r -> r.getRoomNumber() == 102)
.findFirst().orElseThrow(NoSuchElementException::new);
注意:如果您使用的是Java10或更高版本,则可以使用不带参数的orElseThrow()
答案 2 :(得分:0)
如果我没记错,那么描述的格式就是csv格式(https://en.wikipedia.org/wiki/Comma-separated_values)
在这里很好地概述了如何读取csv数据: