嘿,我需要阅读java中的文本文件。问题是该文件具有以下格式:
Id time1 time2 time3 ...
ID2 time1 time2 time3 ...
我需要能够首先读取所有ID,然后读取所有时间1,然后读取全部时间2等。有人能给我一些提示吗?我该如何用java做这件事?效率在这里是重要的,因为这需要进行无数次<-这是我的问题提前感谢您的帮助
最简单的方法是逐行读取整个文件一次,边走边解析行-然后你可以很容易地获得"所有ID"one_answers"所有第一次"等。
如果文件太大,无法做到这一点,您可能需要考虑编写一个工具来更改文件结构-打开几个文件进行写入(每列一个(,然后您可以读取输入行,将输出数据写入每个文件,移动到下一行等。您可以这样做一次,然后在需要时读取每个文件。
转换文件。Ids在第1行,time1在第2行,依此类推。当然,如果这只能完成一次,然后期望对该文件进行多次读取,这是有益的。
一种解决方案是解析文件一次,并创建文件中每个id位置的索引。然后,您可以根据需要将正在读取的"游标"重新定位到id。
编辑
如果无法将整个文件内容加载到内存中,则此解决方案是实用的。为了限制物理读取的数量,LRU缓存保留最近读取或使用的id时间组合可以提高性能。
我们无法逐列读取文件。将整个文件读入内存(java.nio
的FileReader
(,并在类似的数据结构中解析内容(每行String#split
(
Map<String, List<String>>
其中maps键是id(id,ID2,..(和值—一个包含所有时间值的简单列表。
如果您在Linux/UNIX平台上,可以使用cut
命令进行一些预处理