在一次采访中我被问到以下问题,
有一个名为sourceFile.txt的文件,其中包含一个如下所示的随机数字,如下所示
608492
213420
23305
255572
64167
144737
81122
374768
535077
866831
496153
497059
931322
相同的数字可以出现不止一次。 sourceFile.txt的大小约为65GB。
我需要读取该文件并将数字写入新文件,然后按排序顺序说出destinationFile.txt。
我为此编写了以下代码,
/*
Copy the numbers present in the file, store in
list, sort it and than write into another file.
*/
public static void readFileThanWrite(String sourceFileName,String destinationFileName) throws Exception{
String line = null;
BufferedReader reader = new BufferedReader(new FileReader(sourceFileName));
List<Integer> list = new ArrayList<Integer>();
do{
if(line != null){
list.add(Integer.parseInt(line));
}
line = reader.readLine();
}while(line != null);
Collections.sort(list);
File file = new File(destinationFileName);
FileWriter fileWriter = new FileWriter(file,true); // 'True' means write content to end of file
BufferedWriter buff = new BufferedWriter(fileWriter);
PrintWriter out = new PrintWriter(buff);
for(Iterator<Integer> itr = list.iterator();itr.hasNext();){
out.println(itr.next());
}
out.close();
buff.close();
fileWriter.close();
}
但是面试官说上面的程序将无法加载和排序数字,因为文件很大。
什么应该是更好的解决方案?
答案 0 :(得分:3)
如果您知道所有数字都相对较小,那么保留一系列出现的数据就可以了。 如果您没有关于输入的任何信息,那么您正在寻找external sorting。这是一个Java project可以帮助您,这里是corresponding class。