2017-10-16 27 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

我的意思是當我在這個文件中寫入內容時,它已經有我需要用我的內容替換這些數據的內容 –