我想在我的锁定文件中写一个XML数据我有这样的逻辑,但是我的文件数据没有被这个文本数据替换,我得到了例外
this:线程中的异常" main" java.nio.channels.ClosedChannelException at sun.nio.ch.FileChannelImpl.ensureOpen(FileChannelImpl.java:110)at at sun.nio.ch.FileChannelImpl.write(FileChannelImpl.java:199)at 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 java.io.BufferedWriter.close(BufferedWriter.java:266)at java_io_Closeable $ close.call(未知来源)at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48) 在 org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113) 在 org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:117) 在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 :(得分:1)
基本上,您必须按照创建/打开它们的相反顺序关闭流。
w
之后似乎ini
正在关闭。在尝试关闭w
时,它会尝试关闭已经关闭的基础流ini
。
在w.close()
之前移动ini.close()
,或在ini.close()
之后移动w.close()
。