首页 > 解决方案 > JAVA8,解析文本文件并将其值解析为对象

问题描述

我有如下所示的特定文本文件:

name: meeting_name1
description: 
04/18/2012 00:00:00
05/18/2012 00:00:00
... (more dates)
07/18/2012 00:00:00
name: meeting_name2
description: some_desc
04/18/2012 00:00:00
05/18/2012 00:00:00
... (more dates)
07/18/2012 00:00:00
(etc)

我有看起来像这样的java对象:

class Meeting {
    String name;
    String description;
    List<Date> dates;
}

我的意思是读取文件、解析值、创建对象并将它们保存到数据库。

我可以逐行读取文件并将其转换为List<String>,即。所有数据在一起。`我可以用值创建和填充一个 java 对象并将其保存到数据库中。

我的问题是如何找出我在新对象开始的日期和行(名称:meeting_name2)的末尾。

所以我可以制作类似于List<List<String>>whereList<String>将等于一个对象的东西,即。List<Meeting>?

不确定它是否可以理解,抱歉格式化。

标签: javafileobjecttextmapping

解决方案


假设您可以将文件数据读取到 List 变量。(见上面的答案)

List<String> lines = Files.readAllLines(Paths.get("FILE_NAME"));

现在,您可以看到下面的代码作为演示。这是简单的循环和 if else 语句。希望它会帮助你。

public static void main(String[] args) throws ParseException {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
        List<String> data = new ArrayList<>();
        data.add("name: meeting_name1");
        data.add("description: some_desc");
        data.add("07/18/2012 00:00:00");
        data.add("07/18/2012 00:00:00");
        data.add("name: meeting_name2");
        data.add("description: some_desc");
        data.add("07/18/2012 00:00:00");

        List<Meeting> result = new ArrayList<>();
        Meeting temp = null;
        for (String line : data) {
            if (line.startsWith("name:")) {
                temp = new Meeting(line.split(":")[1].trim());
                result.add(temp);
            } else if (line.startsWith("description:")) {
                temp.setDescription(line.split(":")[1].trim());
            } else {
                temp.getDates().add(simpleDateFormat.parse(line)); // Use date for
            }
        }
        System.out.println(result.get(0).getName() + ": " + result.get(0).getDates().size()); // meeting_name1: 2
        System.out.println(result.get(1).getName() + ": " + result.get(1).getDates().size()); // meeting_name2: 1    
    }

    static class Meeting {
        String name;
        String description;
        List<Date> dates;

        public String getName() {
            return name;
        }

        public List<Date> getDates() {
            return dates;
        }

        Meeting(String name) {
            this.name = name;
            this.dates = new ArrayList<>();
        }

        public void setDescription(String description) {
            this.description = description;
        }
    }

推荐阅读