Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 读取包含随机数的文件,对其进行排序,然后写入其他文件_Java_Java Io - Fatal编程技术网

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

Java 读取包含随机数的文件,对其进行排序,然后写入其他文件,java,java-io,Java,Java Io,在一次采访中,我被问到以下问题: 有一个名为sourceFile.txt的文件,其中包含一个接一个排列的随机数,如下所示 608492 213420 23305 255572 64167 144737 81122 374768 535077 866831 496153 497059 931322 同一数字可以出现多次。sourceFile.txt的大小约为65GB 我需要读取该文件并将数字写入新文件,比如destinationFile.txt,按排序顺序 我为此编写了以下代码 /* C

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

有一个名为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();
}
/*
复制文件中的数字,并存储在
列出、排序并写入另一个文件。
*/
公共静态void readFileThanWrite(字符串sourceFileName,字符串destinationFileName)引发异常{
字符串行=null;
BufferedReader reader=新的BufferedReader(新文件读取器(sourceFileName));
列表=新的ArrayList();
做{
如果(行!=null){
add(Integer.parseInt(line));
}
line=reader.readLine();
}while(line!=null);
集合。排序(列表);
文件文件=新文件(destinationFileName);
FileWriter FileWriter=newfilewriter(file,true);//“true”表示将内容写入文件末尾
BufferedWriter buff=新的BufferedWriter(fileWriter);
PrintWriter out=新的PrintWriter(浅黄色);
for(迭代器itr=list.Iterator();itr.hasNext();){
out.println(itr.next());
}
out.close();
buff.close();
fileWriter.close();
}
但采访者说,由于文件太大,上述程序将无法加载和排序数字


什么是更好的解决方案?

如果您知道所有的数字都相对较小,那么保留一个事件数组就可以了。
如果您没有关于输入的任何信息,那么您正在查找。这是一个可以帮助您的方法,这是。

这些数字都是100万以下的正整数,这是偶然的,还是问题规范的一部分。这些数字的最大限制是什么?您采用的是一种非常幼稚的方法,对于任何重大的工作负载都是失败的。好消息是,这让面试官对你的技能有了一个非常清晰的认识。坏消息是你还有很多东西要学。@QBrute那么你可能也得不到那份工作。对65GB的数字进行排序需要特定的机制,否则将耗尽内存。@QBrute,这将如何缓解无法将所有数字保存在内存中的问题?采用相同的方法,但仍然无法找出我的方法失败的地方,但您的答案表明我的方法是正确的,有人误解了它。:)我把你的职位提高了。我没有测试你的代码,但我敢说当输入正确时它应该可以工作。