大家好,请帮我实现这个场景,我有多个文件,如aaa.txt,bbb.txt,ccc.txt,数据为
aaa.txt :
100110,StringA,22
200110,StringB,2
300110,StringC, 12
400110,StringD,34
500110,StringE,423
bbb.txt as:
100110,StringA,20.1
200110,StringB,2.1
300110,StringC, 12.2
400110,StringD,3.2
500110,StringE,42.1
和 ccc.txt 为:
100110,StringA,2.1
200110,StringB,2.1
300110,StringC, 11
400110,StringD,3.2
500110,StringE,4.1
现在我必须阅读所有三个文件(大文件)并将结果报告为 100110:(22,20.1,2.1)。 问题在于文件的大小以及如何以优化的方式实现这一目标。
答案 0 :(得分:1)
我假设您有一些代码可以逐行处理文件,因此我会伪造一个可以保持拉线的扫描程序。
处理此问题的最简单方法是使用Map。在这种情况下,我只使用HashMap。
HashMap<String, String[]> map = new HashMap<>();
while (aaa.hasNextLine()) {
String[] lineContents = aaa.nextLine().split(",");
String[] array = new String[3];
array[0] = lineContents[2].trim();
map.put(lineContents[0], array);
}
while (bbb.hasNextLine()) {
String[] lineContents = bbb.nextLine().split(",");
String[] array = map.get(lineContents[0]);
if (array != null) {
array[1] = lineContents[2].trim();
map.put(lineContents[0], lineContents[2].trim());
} else {
array = new String[3];
array[1] = lineContents[2].trim();
map.put(lineContents[0], array);
}
}
// same for c, with a new index of 2
要添加同步性,您可能会使用其中一个maps。
然后你创建3个只读和放的线程。
答案 1 :(得分:0)
除非您在加载这些文件时进行大量处理,或者正在读取大量较小的文件,否则它可能更适合作为顺序操作。
答案 2 :(得分:0)
如果您的文件都是有序的,只需保持一个Scanner
数组指向您的文件并逐个读取行,然后在文件中输出结果文件。
这样做,您只会在内存中保留与文件数量相同的行数。它既节省时间又节省内存。
如果您的文件未订购,则可以使用sort
命令对其进行排序。