从Java中的文本文件读取记录

时间:2019-03-23 09:01:46

标签: java file

我有一个文本文件,其中包含以下格式的多个记录

读取文件后,如何存储所有这些记录,以便我可以访问和操作它们,例如更新记录中的字段。该字段和字段内容由多个空格分隔。用空行分隔

birthday      27-03-1984
address       27 Drew Street, Elwood,
              VIC
Postcode      3184
phone         0067282

name          Carlos
birthday      27-03-1988
address       27 langhlam, Southbank,
              VIC
Postcode      3184
phone         00672165```

2 个答案:

答案 0 :(得分:1)

看起来像制表符分隔的数据。使用CSV解析器读取这些内容,例如univocity

答案 1 :(得分:0)

有提到的库,但是对于这种简单的情况,仅使用java.util就可以轻松完成:

public class PersonsReader {
    public static void main(String[] args) throws IOException {
        String content = new String(Files.readAllBytes(Paths.get("inputFile.txt")));
        List<Person> persons = Arrays.stream(content.split("\n\n"))
                .map(PersonsReader::toPerson).collect(Collectors.toList());
        // use persons list here
    }

    private static Person toPerson(String personData) {
        Map<String, String> keyValue = Arrays.stream(personData.split("\n"))
                .collect(Collectors.toMap(
                        line -> line.split("\\s+")[0],
                        line -> line.split("\\s+")[1]));
        return new Person(keyValue.get("name"),
                keyValue.get("birthday"),
                keyValue.get("address"),
                keyValue.get("Postcode"),
                keyValue.get("phone"));
    }
}

请注意,某些键在keyValue中不存在,因此Person构造函数为某些参数获取了null。另外,在Person构造函数中,您可以根据需要将参数转换为Integer(并首先检查null)。