2017-10-16 79 views
0

我想写我锁定的文件中的XML数据我有一个这样的逻辑,但我的文件数据不是由该文本的数据替换,我有例外像如何在锁定文件中写入数据?

这样的:异常的线程“主“ java.nio.channels.ClosedChannelException在 sun.nio.ch.FileChannelImpl.ensureOpen(FileChannelImpl.java:110)在 sun.nio.ch.FileChannelImpl.write(FileChannelImpl.java:199)在 sun.nio .cs.StreamEncoder.writeBytes(StreamEncoder.java:218)at sun.nio.cs.StreamEncoder.implClose(StreamEncoder.java:316)at sun.nio.cs.StreamEncoder.close(StreamEncoder.java:149)at jav a.io.BufferedWriter.close(BufferedWriter.java:266)在 java_io_Closeable $ close.call(来源不明)在 org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48) 在 org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:117) at locckGroovy.main(loccky .groovy:90)

。我应该改变什么才能做到这一点?

RandomAccessFile ini = new RandomAccessFile(file, "rwd"); 
     FileLock lock = ini.getChannel().tryLock(); 
    try{ 

     w=new BufferedWriter(Channels.newWriter(ini.getChannel(),"UTF-8")); 
     w.write(text); 

    }finally{ 

    ini.close(); 

    } 
+0

你在最后调用'w.close()'吗? –

+0

是的,我是..... ,,,,,,, –

+0

更新后的代码示例没有编译('ini'在'try'块中声明,不能在'finally'中访问) –

回答

1

基本上,您必须以创建/打开它们的相反顺序关闭流。

看起来在ini后关闭。尝试关闭w时,它会尝试关闭已关闭的基础流ini

ini.close()之前移动w.close(),或在w.close()之后移动ini.close()

+0

顺便问一下,你知道是否足够写w.rite(“”)在这个代码中使相关文件为空? w = new BufferedWriter(Channels.newWriter(ini.getChannel(),“UTF-8”)); w.write(“”); (文本); –

+0

要创建一个空文件,您不需要任何'write()'。只是打开和关闭它也应该这样做。 'write(“”)'实际上什么也不做。 – jurez

+0

我的意思是当我在这个文件中写入内容时,它已经有我需要用我的内容替换这些数据的内容 –

相关问题