【问题标题】:Java: Handling a stream to read from fileJava:处理要从文件中读取的流
【发布时间】:2017-11-12 07:08:26
【问题描述】:

对于我大学的一个实验室,我正在用 Java 开发一个系统,该系统能够存储文件中的数据(给定文件路径为字符串)。我试图使用路径中的线流来处理问题,但我在早期阶段就被卡住了。该文件组织如下:一行的不同字段用“;”分隔每行以“P”或“D”开头。根据这个参数,我将使用该行的内容来创建一个“Patient”对象或一个“Doctor”对象,随后存储在两个不同的地图(患者或医生)中。我做了以下事情:

Path p= Paths.get(path);
Stream <String> lines=Files.lines(p, StandardCharsets.UTF_8);
lines.flatMap(l->Stream.of(l.split("; ")))....

我的想法是检查行首的单词,并据此将剩余元素用作能够创建和存储相应对象(insertPatient 或 insertDoctor)的方法的参数。但我对如何做到这一点还没有丝毫的想法。我知道做同样事情的不同方法,但我真的想使用流开发解决方案,至少在读取不同行的过程中。 谢谢, 詹卢卡。

【问题讨论】:

    标签: java java-8 stream java-stream


    【解决方案1】:
    try (Stream<> lines = Files.lines(p, StandardCharsets.UTF_8)) { // 1
        lines.map(line -> line.split(";"))                          // 2
             .forEach(lineAsArray -> {
                 if (lineAsArray[0].equals("D")) {
                     insertDoctor(lineAsArray);
                 }
                 else if (lineAsArray[0].equals("P")) {
                     insertPatient(lineAsArray);
                 }
             });
    }
    
    1. 使用 try-with-resources 确保流以及文件读取器已关闭
    2. 不要使用 flatMap,因为您想对完整的线条而不是单元格进行操作。

    【讨论】:

    • 注意:如果您不为Files.lines 指定UTF-8,则默认为UTF-8,这与大多数Java API 不同。
    猜你喜欢
    • 1970-01-01
    • 2013-09-29
    • 1970-01-01
    • 1970-01-01
    • 2015-07-25
    • 1970-01-01
    • 2012-05-03
    • 2019-04-29
    • 2022-01-08
    相关资源
    最近更新 更多