2016-10-13 4 views
1

JAVA docsで与えられているように、変数 'trouble'はjava.io.IOExceptionが存在するときは常にtrueに設定されます。PrintStreamオブジェクトのcheckError()メソッドがtrueを返す条件は何ですか?

import java.io.*; 
class First 
{ 
     public static void main(String[] args) throws Exception 
     { 
       File f = new File("a.txt"); 
       PrintStream ps = new PrintStream(f); 
       f.delete(); 
       ps.write(65); 
       boolean b = ps.checkError(); 
       System.out.println(b); //Output: false 
       ps.close(); 
     } 
} 

書き込み前にファイルを削除しても、checkError()メソッドがtrueを返さないのはなぜですか?変数 'trouble'がtrueに設定され、メソッドcheckError()がtrueを返す場合の例を挙げてください。 JavaDocによれば

+0

「MyPrintStream」とは何ですか? – marstran

+0

ファイルを削除してから書き込みを行うのは、どのプログラムでも簡単です。ファイルを削除してからそれを読んでください:-) – dasblinkenlight

+0

「MyPrintStream」とは –

答えて

1

checkError戻りtrueとこのストリームがInterruptedIOException以外IOExceptionが発生した、またはsetErrorメソッドが呼び出された場合にのみ、場合。

+0

彼はファイルを削除することによってIOExceptionが発生したと考えています。彼はしていないが、それは彼が考えるものだ。 – EJP

-2

私が書き込む前に、ファイルを削除した場合でも、なぜこの方法checkError()がtrueを返すされていませんか?変数 'trouble'がtrueに設定され、メソッドcheckError()がtrueを返す場合の例を挙げてください。

  1. あなたがFile.delete()の結果を確認していないとしてあなたは、あなたがファイルを削除したことを知りません。

  2. autoFlushなしでPrintStreamを作成しているので、println()はファイルシステムに何もしません。

  3. ファイルを削除すると、成功して書き込みがフラッシュされても、書き込み時にIOExceptionが書き込まれる原因はありません。例えばFileOutputStreamで試してみてください。

質問は3つの誤った仮定に基づいています。

+0

1.ファイルが削除され、Thread.sleep(5000)を使用してGUIで確認しました。 2.私はautoFlushをtrueとして使用し、newLineも渡しました。結果は同じです。 3.第3のポイントは正しいです。私はDataOutputStreamを使用し、これも例外をスローしません。今私の疑問は、どのように削除されたファイルに書き込みをしようとしても例外はありません? –

+0

@mynameisGYAN 2つの間違った仮定が残っています。 – EJP

+0

@downvoterご説明ください。 – EJP

関連する問題