【问题标题】:How to split file content line by line and save to List [closed]如何逐行拆分文件内容并保存到列表[关闭]
【发布时间】:2017-01-24 10:01:22
【问题描述】:

我必须阅读文件 people.txt,其中包含:

name | age | sex | address 
michael | 23 | M | germany
rachel | 25 | F | dubai

我想拆分此文件的内容并将其保存到 Persons 列表 (List<Person>),其中只需设置 name 和 sex 字段。

class Person {
    String name;
    String sex;
}

如何使用 Java 8 实现这一点?

【问题讨论】:

    标签: java java-8 java-stream collect


    【解决方案1】:

    假设每个人都换了一行:

    Files.lines(Paths.get("people.txt"))
         .skip(1) // skip the header
         .map(Person::new)
         .collect(toList());
    

    应该有一个构造函数,它接受一个String 来构造一个Person 实例:

    public Person(String s) {
        String[] values = s.split("\\|");
        // validate values.length and set values trimming them first
    }
    

    如果只设置特定字段,最好写一个静态工厂方法(如Person::createFromFileRow)。

    【讨论】:

      【解决方案2】:
               Files.lines(Paths.get("/your/path/here"))
                    .map(line -> line.split("\\s*\\|\\s*"))
                    .map(array -> new Person(array[0], array[2]))
                    .collect(Collectors.toList);
      

      我还没有编译这个,但应该可以完成这项工作。

      【讨论】:

      • 我想你可能想要line.split("\\s*\\|\\s*")。 '|'需要转义,最好包含空格。
      • map(array -> new Person(array[0], array[2])) 是一个硬编码解决方案,它只在这种情况下看起来简洁,没有任何检查和额外的逻辑
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-08
      • 2019-08-30
      • 1970-01-01
      • 1970-01-01
      • 2012-02-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多