2012-03-20 33 views
4

是否有可能在java中打开一个文件追加数据并关闭无数次。例如:在Java中打开现有文件并关闭它。

//---- psuedocode 
     //class variable declaration 
     FileWriter writer1 = new FileWriter(filename); 

     fn1: 

     writer.append(data - title); 

     fn2: 
     while(incomingdata == true){ 
     writer.append(data) 
     writer.flush(); 
     writer.close() 
     } 

问题在于while循环。该文件已关闭,无法再次打开。任何人都可以帮助我呢?

+0

你可以重新打开每一次呢? – bdares 2012-03-20 07:19:49

+0

一旦关闭流,您就无法访问它。 – 2012-03-20 07:19:52

+1

那么*不要*关闭它?这里有什么问题? – EJP 2012-03-20 07:30:43

回答

2

建议每次关闭和重新打开文件的答案都是非常正确的。但是,如果你绝对必须这样做(并且我不清楚你这么做),那么你可以每次创建一个新的FileWriter。当你构造一个FileWriter时,传递true作为第二个参数,获得一个附加到文件而不是替换它的文件。像

FileWriter writer1 = new FileWriter(filename, true); 
+0

因此,我可以假设文件每次都不会被新文件替换? – Siddharthan 2012-03-20 07:48:25

+0

这就是第二个参数给你的。如果您需要更多详细信息,请检查FileWriter的javadoc。 – 2012-03-20 07:52:58

0

我不建议尝试关闭文件,然后重新打开它。打开文件是一项昂贵的操作,您执行此操作的次数越少,代码运行速度越快。

打开一次,并在完成写入后关闭文件。这将在你的循环之外。

1

一旦文件关闭,您将需要重新打开它。调用writer.flush()应该刷新流。所以基本上,您将从while循环中删除writer.close()。这将允许您在完成文件后关闭文件。

所以你有两个选择,要么从while循环中删除writer.close(),要么在循环开始时创建一个新的FileWriter实例。

1

一旦流被关闭,进一步的write()或flush()调用将导致IOException被抛出。然而,关闭先前关闭的流不起作用。

while(incomingdata == true){ 
     writer.write(data) 
} 
writer.close() 

您不需要每次刷新。因为调用close()将首先在关闭流之前刷新数据。

更新了

,我创造了要保存的文件。对于哪个应该 关闭它,所以时间戳更新。那就是当文件同步 直播。

使用方法如下

while(incomingdata == true){ 
      writer.append(data); 
      writer.flush(); 
} 
writer.close(); 
+0

如果我再次遇到循环,该怎么办?是否有可能再次打开文件? Bcos我已经在循环结束时关闭它 – Siddharthan 2012-03-20 07:29:30

+0

它会抛出IOException。仅在将所有数据写入流之后关闭流。 – 2012-03-20 07:33:41

相关问题