Java 为什么我';我在创造什么?

Java 为什么我';我在创造什么?,java,file,bufferedreader,Java,File,Bufferedreader,我有一个函数,可以创建7个不同的文本文件和数据行。然后,使用以下函数将这7个文件合并到不同函数中的单个文件中: public void createSingle683File(int groupNumber, FileWriter wr){ try{ if(new File(printDir+"683_"+groupNumber+".txt").exists()){ File f683 = new File(printDir

我有一个函数,可以创建7个不同的文本文件和数据行。然后,使用以下函数将这7个文件合并到不同函数中的单个文件中:

public void createSingle683File(int groupNumber, FileWriter wr){
        try{
            if(new File(printDir+"683_"+groupNumber+".txt").exists()){
                File f683 = new File(printDir+"683_"+groupNumber+".txt");
                BufferedReader input = new BufferedReader(new FileReader(f683));
                String line = null;
                while ((line = input.readLine()) != null){
                    //write contents of existing file to new file
                    wr.write(line+"\n");
                }
                //close bufferedInput
                input.close();
            }
        }catch(Exception e){
            e.printStackTrace();
        }
    }
呼叫代码:

    File fileHandle683 = new File(printDir+"683.txt");
                FileWriter wr683 = new FileWriter(fileHandle683);
                for (int groupNumber = 1; groupNumber < 8; groupNumber++){
                    createSingle683File(groupNumber,wr683);
                }
.
.
.
.
.//stuff
wr683.close();
File fileHandle683=新文件(printDir+“683.txt”);
FileWriter wr683=新的FileWriter(fileHandle683);
对于(int groupNumber=1;groupNumber<8;groupNumber++){
创建Single683文件(组号,wr683);
}
.
.
.
.
.//东西
wr683.close();
最后的683.txt从第7个文件(683_7.txt)中丢失了大约50行,我不知道为什么。最终文件的最后几行总是丢失,而且只是丢失。我不知道我是否即将关闭bufferInput

任何想法都将不胜感激。我可以很快地测试任何想法


谢谢

您是在该FileWriter实例上调用
flush()
和/或
close()
吗?

您是在该FileWriter实例上调用
flush()
和/或
close()
吗?

我看不到您在哪里关闭
wr683
。我怀疑当进程关闭时,数据被留在缓冲区中。至少调用
flush()

我看不出你在哪里关闭
wr683
。我怀疑当进程关闭时,数据被留在缓冲区中。至少调用
flush()

当前您没有关闭最终文件的文件编写器。因此,您当前缺少的内容可能仍在流I/O的缓存中。因此,请关闭最终文件的FileWriter实例并查看该文件的内容

因此,在for循环之后,只需输入

wr683.close()


希望有帮助。

目前,您没有关闭最终文件的文件编写器。因此,您当前缺少的内容可能仍在流I/O的缓存中。因此,请关闭最终文件的FileWriter实例并查看该文件的内容

因此,在for循环之后,只需输入

wr683.close()


希望有帮助。

是的,我在函数末尾使用wr683.close()关闭wr683;您确定正在执行
close()
吗?是的,我使用wr683.close()在函数末尾关闭wr683;您确定正在执行
close()
吗?flush()做什么而close()不做什么?它将所有数据写入磁盘,但使写入程序保持打开状态以获得更多输出。如果您想继续编写,但同时又想最大限度地减少丢失到目前为止已写入的数据的机会,那么这将非常有用。是的,我会逐步完成,并看到它正在被调用。我刚刚为这7个文件中的每一个都在for循环中添加了flush(),这就解决了它!谢谢调用
close()
也会刷新文件-因此这似乎意味着编写器永远不会调用
close()
的代码reached@northpole-真奇怪。就像@matt说的,调用
close()
应该会自动调用
flush()
。Java库中的某个地方可能有bug(但这不太可能),或者您有多个线程访问该文件和/或
wr683
。或者可能是
wr683
//stuff
中被重新分配了?flush()做什么而close()做什么?它将所有数据写入磁盘,但让writer打开以获得更多输出。如果您想继续编写,但同时又想最大限度地减少丢失到目前为止已写入的数据的机会,那么这将非常有用。是的,我会逐步完成,并看到它正在被调用。我刚刚为这7个文件中的每一个都在for循环中添加了flush(),这就解决了它!谢谢调用
close()
也会刷新文件-因此这似乎意味着编写器永远不会调用
close()
的代码reached@northpole-真奇怪。就像@matt说的,调用
close()
应该会自动调用
flush()
。Java库中的某个地方可能有bug(但这不太可能),或者您有多个线程访问该文件和/或
wr683
。或者可能是
wr683
//stuff
中被重新分配了吗?