从 object 中的文本文件加载格式化数据

Loading formatted data from text file in an object

我想阅读以下格式的文本文件:

title1, 2010, isbn, 121212
author1, firstname, lastname
author2, firstname, lastname

title2, 1999, isbn, 565656
author1, firstname, lastname

title3, 2001, isbn, 898989
author1, firstname, lastname
author2, firstname, lastname
author3, firstname, lastname

使用 Java 等 object-oriented 编程语言加载 object(s) 中每个数据的最佳方法是什么?

我是否必须创建一个 class 属性为标题、年份、isbn 和作者,如下所示:

public class Book {

    private String title;
    private String year;
    private String isbn;
    private List<String> author; // A list because I don't know how many authors wrote the book
}

或多个 class,每个实体一个:

public class Book {

    private String title;
    private String year;
    private String isbn;
}

public class Author {

    private String firstname;
    private String lastname;
}

谢谢。

这里是你需要的所有部分来组合一个解决方案。

要逐行读取文件,请使用 BufferedReader:

BufferedReader reader = new BufferedReader( new FileReader( filename ) );

现在你可以通过调用读取一行,例如

String line = reader.readLine();

要将行拆分为逗号分隔的元素,您可以使用 String.split。例如。

String[] token = line.split( "," );

您应该能够使用这些工具和一些创造力来组合解决方案:)

你的"formatted"文件真的格式化了吗?你会 运行 遇到问题,因为你的文件中有两种类型的对象。从解析器的角度来看,它们是不可识别的。这意味着您将需要自定义逻辑来分析您解析的内容,然后需要决定它是什么对象以及如何存储它。

一种方法可以是 http://opencsv.sourceforge.net/ 你的文件对我来说看起来像一个 csv 文件,可以这样解析。

如果您可以控制您的格式化数据,您应该更改它以使其更清楚它的用途。您将有几个选项,例如:

  1. 分成2个CSV文件 您可以有 1 个文件用于书籍,另一个文件用于作者。然后,上面的 opencsv 库会自动将您的文件解析为您可以使用的 Java 个对象。

  2. 为您的文件创建 json 格式

例如,您可以使用:

而不是像上面那样格式化
{
 "title" : "mytitle",
 "year": 2001,
 "isbn" : 1231312,
 "authors" : [ "author1", "author2" ]
} ...

这种格式将使您能够使用 GSON 或 Jackson 对象映射器来解析这些文件,此时它变得非常容易。 Google 将提供大量有关如何使用它的示例。

希望对您有所帮助,

阿图尔