从Java中的文本文件读取数据

时间:2019-03-10 19:11:00

标签: java

我想根据基本项目的一部分从文本文件加载数据。例如。文本文件如下所示:

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,但是我不知道如何正确地做到这一点。

谢谢。

3 个答案:

答案 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数据:

https://www.baeldung.com/java-csv-file-array