假设我知道文本文件格式,
说,每行包含4个这样的字段:
firstword secondword thirdword fourthword firstword2 secondword2 thirdword2 fourthword2 ...
我需要将其完全读入内存
我可以使用这种方法:
open a text file while not EOF read line by line split each line by a space create a new object with four fields extracted from each line add this object to a Set
好的,但有什么更好的,一个特殊的第三方Java库吗?
这样我们就可以事先定义每个文本行的结构,并用一些函数解析文件
thirdpartylib.setInputTextFileFormat("format.xml"); thirdpartylib.parse(Set, "pathToFile")
答案 0 :(得分:1)
如果您明确知道分隔符将是什么,那么您建议的方法将快速可靠并且代码开销非常小。第三方库(谷歌“java文本文件库”的长篇名单)的优势在于它可能有一堆代码来处理作者关心的奇怪案例。缺点是,如果您正在处理简单可靠的文本文件格式,它可能会比您需要的代码更多。
自己这样做的好处是,您可以根据自己的要求调整代码,包括可伸缩性问题,如果您拥有大量数据,这些问题可能会成为一个考虑因素。通常第三方库会对文件进行完整的读取,如果你有几百万行,这可能是不实际的。
我的建议是花一个小时左右写自己的,看看你得到了什么。你可以用很少的努力来破解它。如果事实证明你有一个复杂的问题要解决数据格式的不同特殊问题,那么就开始寻找一个库。
答案 1 :(得分: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。