为什么我正在创建的文本文件中缺少最后几行?

时间:2011-05-05 17:08:22

标签: 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+"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();

Alaways最终的683.txt缺少来自第7个文件(683_7.txt)的大约50行,我无法弄清楚原因。它总是,而且只是最后文件的最后几行丢失。我无法判断我是否将很快关闭bufferInput或者是什么。

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

谢谢!

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:3)

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

答案 2 :(得分:0)

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

所以在for循环之后你只需输入

  

wr683.close();

希望它有所帮助。