在java中读取文本文件

时间:2011-04-19 12:08:47

标签: java file

嘿 我需要在java中读取一个文本文件。问题是该文件具有以下格式:

Id time1 time2 time3 ...
ID2 time1 time2 time3 ...

我需要能够先读取所有ID,然后一直读取1,然后读取所有时间2等。 任何人都可以给我一些提示我怎么能在java中这样做?效率在这里很重要,因为这需要为时间的优点而做 - 这是我的问题 在此先感谢您的帮助

5 个答案:

答案 0 :(得分:2)

转置文件。第1行的Ids,第2行的time1,依此类推。当然,如果只能进行一次,那么这是有益的,然后预计会对该文件进行多次读取。

答案 1 :(得分:2)

最简单的方法是逐行读取整个文件,然后解析行 - 然后你可以很容易地得到“所有ID”,然后是“所有第一次“等等。

如果文件太大而无法执行此操作,您可能需要考虑编写一个工具来更改文件结构 - 打开几个文件进行写入(每列一个)然后您可以读取输入行,写入输出数据每个文件,移动到下一行等。您可以执行一次,然后在需要时读取每个文件。

答案 2 :(得分:2)

一种解决方案是解析文件一次,并创建文件中每个ID位置的索引。然后,您可以根据需要将读数“光标”重新定位到ID。

修改

如果无法将整个文件内容加载到内存中,则此解决方案很实用。为了限制物理读数的数量,保留最近读取或使用的id-times组合的LRU缓存可以提高性能。

答案 3 :(得分:1)

我们无法逐列读取文件。将整个文件读入内存(FileReader java.nio)并解析数据结构中的内容(每行String#split),如

Map<String, List<String>>

其中maps键是id(ID,ID2,..),值是包含所有时间值的简单列表。

答案 4 :(得分:0)

如果您使用的是Linux / UNIX平台,则可以使用cut命令进行一些预处理