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

时间:2015-11-18 02:43:26

标签: java oop text ascii

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

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这样的面向对象编程语言加载对象中每个数据的最佳方法是什么?

我是否必须创建一个属性为title,year,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
}

或倍数类,每个实体一个:

public class Book {

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

public class Author {

    private String firstname;
    private String lastname;
}

感谢。

2 个答案:

答案 0 :(得分:0)

以下是您需要整理解决方案的所有部分。

要逐行阅读文件,请使用BufferedReader

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

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

String line = reader.readLine();

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

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

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

答案 1 :(得分:0)

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

一种方法可能是http://opencsv.sourceforge.net/ 你的文件看起来像csv文件,可以解析。

如果您可以控制格式化数据,则应对其进行更改以使其更清晰。你有几个选择,例如:

  1. 分为2个CSV文件 您可以拥有1个书籍文件,另一个文件可供作者使用。上面的opencsv lib将自动将您的文件解析为Java对象,供您使用。

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

  3. 例如,

    ,而不是像上面那样格式化,你可以使用:

    {
     "title" : "mytitle",
     "year": 2001,
     "isbn" : 1231312,
     "authors" : [ "author1", "author2" ]
    } ...
    

    这种格式将使您能够使用GSON或Jackson对象映射器来解析这些文件,此时它变得非常容易。谷歌将有很多关于如何使用它的例子。

    希望有所帮助,

    阿图尔