嘿, 我需要读取java中的文本文件。问题是,该文件的格式如下:在java中读取文本文件
Id time1 time2 time3 ...
ID2 time1 time2 time3 ...
我需要能够先阅读所有的ID,然后读取所有的时间1,那么所有时间2等 谁能给我一些提示如何能我这样做,请在Java?效率在这里很重要,因为这需要完成的时间< - 这是我的问题 在此先感谢您的帮助
嘿, 我需要读取java中的文本文件。问题是,该文件的格式如下:在java中读取文本文件
Id time1 time2 time3 ...
ID2 time1 time2 time3 ...
我需要能够先阅读所有的ID,然后读取所有的时间1,那么所有时间2等 谁能给我一些提示如何能我这样做,请在Java?效率在这里很重要,因为这需要完成的时间< - 这是我的问题 在此先感谢您的帮助
转置文件。第1行的ID,第2行的时间1等等。当然,如果这只能完成一次,然后对该文件进行多次读取,这是有益的。
最简单的方法是通过线一次读取整个文件中的行,解析线,当您去 - 那么你可以很容易得到“所有ID”,其次是“所有的第一次”等
如果文件太大无法做到这一点,您可能需要考虑编写一个工具来更改文件结构 - 打开多个文件进行写入(每列一个),然后您可以读取输入行,写入输出数据到每个文件,移到下一行等等。你可以做一次,然后在你需要的时候读取每个文件。
一个解决方案是解析文件一次,并创建文件中每个ID位置的索引。然后,您可以根据需要将读数“光标”重新定位到ID。
EDIT
该解决方案是实际的,如果整个文件的内容不能被加载到存储器。为了限制物理读数的数量,保留最近读取或使用的id时间组合的LRU缓存可以提高性能。
我们无法逐列读取文件。读取整个文件到存储器(的java.nio
FileReader
)和parse在数据结构(在每一行String#split
)的含量等
Map<String, List<String>>
其中地图键是id(ID,ID2,...)和所述值一个包含所有时间值的简单列表。
如果你是一个Linux/UNIX平台上,你可以做一些预处理与cut
命令
请参阅谷歌约1十亿如何在一个文件中读取一行一行地在Java中的例子。或搜索SO。 – 2011-04-19 12:10:49
问题是效率问题,我已经天真地逐行实现了这个阅读,并且到达了指定的定时器,但是它需要很长的时间。 – tzer 2011-04-19 12:12:38
@Richard我不认为他的问题与读取文本文件有关,而是高效地读取该特定结构的文本文件... – Diego 2011-04-19 12:12:41