Java Filewriter不会将所有数字写入我的文件

Java Filewriter不会将所有数字写入我的文件,java,file,filewriter,Java,File,Filewriter,我的代码应该执行以下操作。它读取文本文件的最后一个素数,并继续写下下面所有的素数 public static void PrintPrimesIntoFile(){ File primenumbers = new File("C:/Users/Leon/IdeaProjects/NumberTheory/primes.txt"); String lastprim = ""; int

我的代码应该执行以下操作。它读取文本文件的最后一个素数,并继续写下下面所有的素数

 public static void PrintPrimesIntoFile(){
            File primenumbers = new File("C:/Users/Leon/IdeaProjects/NumberTheory/primes.txt");
            String lastprim = "";
            int lp = 0;
            Writer wr = null;

            //create file or check existence
            if(!primenumbers.exists())
            {
                try{
                    primenumbers.createNewFile();
                }catch(IOException e){
                    e.printStackTrace();
                }
            }

            //read last line
            try{
                Scanner sc = new Scanner(primenumbers);
                while(sc.hasNext()){
                    lastprim = sc.next();
                }
                lp = Integer.parseInt(lastprim);
                lp++;

            }catch(IOException e){
                e.printStackTrace();
            }catch(NumberFormatException e){
                e.printStackTrace();
            }
            System.out.println(lastprim);


            //print next numbers
            try{
                wr = new FileWriter(primenumbers, true);
                while(true){
                    if(NumberTheoryFunctions.CheckPrime(lp)){
                        wr.write(new Integer(lp).toString());
                        System.out.println(lp);
                        wr.write("\r\n");
                    }
                    lp++;
                }
            }catch(IOException e){
                e.printStackTrace();
            }
        }
问题只是关于最后一个try-and-catch块中的循环。我检查一个数字是否为素数,如果是,我将其写入文件。如果没有,我就去下一个号码。程序应该在我关闭它之前执行此操作

我的问题是,不是每一个被检查的数字,无论它是素数还是非素数,都会被写入到文件中。例如,当我停止程序时,我的控制台显示数字1022821,但在我的文件中,最后一个数字是1020893

甚至有一种情况(这才是真正的问题)就是一个数字不能被完全记下来。例如,我的程序本来应该写1022701,但它只写了102就停止了

由于最后一个循环一直在进行,我甚至不可能在代码中的任何地方编写
wr.close()


有人能帮我解决这个问题吗?

因此,如果文件以素数结尾,你将打印与结果相同的结果,如果没有,你将找到下一个素数?不,我只在文件中写入素数。当我启动新程序时,它从它之前停止的地方开始,所以我不必再次检查已经写入文件的数字。那么假设文件中的最后一个数字是7,那么当你启动程序时,它应该打印7并插入11?另外,你的while循环永远不会结束,即while(true)为什么会这样?你可以偶尔刷新一下Writer()。最好是找到某种方法最终退出循环并进行适当的关闭。当它读取7时,它会继续将所有大于7的素数写入文件。但它不能取代它。当文件以7结尾时,程序将添加11,13,17,。。直到我停止。最后我得到了从2到的所有素数的完整列表(在这个例子中是17)。