读取包含随机数的文件,对其进行排序,然后写入其他文件

时间:2016-11-05 10:00:41

标签: java java-io

在一次采访中我被问到以下问题,

有一个名为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();
}

但是面试官说上面的程序将无法加载和排序数字,因为文件很大。

什么应该是更好的解决方案?

1 个答案:

答案 0 :(得分:3)

如果您知道所有数字都相对较小,那么保留一系列出现的数据就可以了。 如果您没有关于输入的任何信息,那么您正在寻找external sorting。这是一个Java project可以帮助您,这里是corresponding class