2016-03-30 4 views
4

アンドロイドでは、ボタンをクリックしてファイルを書き、次回にクリックするとファイルを保存し、バッファされたライターを閉じます。しかし、私はまた、onDestroy関数でバッファライタを閉じるための機能を実装したいと思っています。その前に私はBufferedwriterが既に閉鎖されているかどうかを知る必要があります。 Buffered Writerが既に閉じられているかどうかを確認しますか?BufferedWriterが既に閉じられているかどうかを確認するにはどうすればよいですか?

さらに、bufferedWriter.close()機能セットbufferedWriternullがありますか?

+1

'場合(ライター!= nullを、あなたが次に

BufferedWriter bufferWriter; boolean isOpen = false; 

変数のインスタンスとして2つの変数の下に定義し、この

のように確認することができ、またthis

参照してください。 ) 'それを閉じます。 – Satya

+0

"bufferedWriter.close()関数はbufferedWriterをnullに設定します"いいえ、これは不可能です。 'bufferedWriter'は単に' BufferedWriter'インスタンスへの参照です。そのインスタンスは0以上の参照を持つことができ、実際に何が参照されているかを知る方法はありません。 –

答えて

4

既に閉じているWriterにcloseメソッドを呼び出すことは影響ありません。

Writerがクローズされているかどうかを知りたい場合は、writer.flush()を呼び出すことができます。IOExceptionをスローすると、Writerが既に閉じられていることを意味します。

ストリームを閉じることで参照が無効になることはありません。明示的にそれをnullに設定する必要があります。

+0

説明をありがとう。 – cybodroid

0

if(bufferredWriter!=null) 
{ 
bufferredWriter.close(); 
} 

をnullにbufferredWriter等しくない場合は、java7以上を使用している場合、あなたは以降BufferredWriter

JDK 7の閉鎖を心配する必要はありません、あなたは試してみるのあなたを作ることができます確認することができます例えば、リソース

try(BufferredWriter bufferedWriter=new BufferredWriter()) 
{ 

//your code 
} 
catch(Exception e) 
{ 
} 
0
付き

ヌルでない場合は、BufferedWriterを何回でも閉じることができます。したがって、BufferedWriterが開いているかどうかを特に確認する必要はありません。

IOExceptionが発生した場合にtry/catchでclose文を囲むと、さらに優れています。 javadocを

から

は、最初にそれをフラッシュし、ストリームを閉じます。ストリームが閉じられると、さらにwrite()またはflush()の呼び出しによってIOExceptionがスローされます。前に閉じたストリームを閉じることは効果がありません。

sidgateで説明されているように、ストリームをクローズしても参照を無効にしても、手動で割り当てる必要はありません。

+0

うわー、それは私にとって初めてのことです。この現象の背後に説明がありますか? javadocsからの – cybodroid

+0

'閉じられたストリームを閉じることは効果がありません。 '私は単にjavadocを参照しました。 :) – Batty

+1

ああ、ありがとう。 :-)私はもっと頻繁にjavadocsを読むべきだと思います。 – cybodroid

0

bufferedWriter.close() - このライターを閉じます。バッファの内容がフラッシュされ、ターゲットライタが閉じられ、バッファが解放されます。 closeの最初の呼び出しだけが効果を持ちます。

try { 
    if (!isOpen) { 
     bufferWriter = new BufferedWriter(new FileWriter(file, true)); 
     bufferWriter.write(initialData); 
     isOpen = true; 
    } 
    bufferWriter.write(remainingData); 
    bufferWriter.flush(); 
    Log.d(TAG, "written to file:" + file.getAbsolutePath()); 
} catch (IOException e) { 
    Log.v("IOException", e.toString()); 
} 
関連する問題