如何在锁定文件中写入数据?

时间:2017-10-16 10:45:25

标签: java

我想在我的锁定文件中写一个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();

    }

1 个答案:

答案 0 :(得分:1)

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

w之后似乎ini正在关闭。在尝试关闭w时,它会尝试关闭已经关闭的基础流ini

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