0

假设我知道一种文本文件格式,

比如说,每行包含 4 个字段,如下所示:

第一个词 第二个词 第三个词 第四个词
第一个字2 第二个字2 第三个字2 第四个字2
...

我需要将它完全读入内存

我可以使用这种方法:

打开一个文本文件
虽然不是 EOF
  逐行阅读
  用空格分隔每一行
  创建一个从每行提取四个字段的新对象
  将此对象添加到 Set

好的,但是有什么更好的,一个特殊的 3-rd 方 Java 库吗?

这样我们就可以预先定义每个文本行的结构并使用一些函数解析文件

thirdpartylib.setInputTextFileFormat("format.xml");
第三方库解析(设置,“pathToFile”)

?

4

2 回答 2

1

如果您明确知道分隔符是什么,那么您建议的方法将快速可靠,并且代码开销很小。第三方库(谷歌“java文本文件库”一长串)的好处是它可能有一堆代码来处理作者关心的奇怪情况。不利的一面是,如果您正在处理一个简单可靠的文本文件格式,它可能会比您需要的代码多。

自己这样做的好处是您可以根据您的要求调整代码,包括可伸缩性问题,如果您有大量数据,这很可能是一个考虑因素。很多时候,第 3 方库会完整读取文件,如果您有几百万行,这可能是不切实际的。

我的建议是花一个小时左右自己写,看看你能从哪里得到。您可以毫不费力地破解它。如果事实证明您有一个复杂的问题需要解决围绕数据格式的不同特殊问题,那么请开始寻找库。

于 2010-04-26T10:40:55.407 回答
1

你可以这样做:

// Assuming a Reader called in and a Set called mySet

String line = in.readLine();
while(line != null)
{
  String[] splat = line.split(" ");
  mySet.add(new Widget(splat[0], splat[1], splat[2], splat[3]));
  line = in.readLine();
}

但是您确实需要更好地定义“更好”的含义。上面的方法在“坏”输入的情况下表现不佳,但它会非常快(这实际上取决于 Set 的实现。如果您不断调整它的大小,您可能会招致性能损失)。

使用 XML 并定义模式将允许您在解析之前验证输入,并且可能会简化对象的创建,但您将无法在每行上只有四个字符串(您将需要 XML 标记等)。有关示例第三方库,请参阅XMLBeans 。

于 2010-04-26T10:58:11.260 回答