2016-10-13 7 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. 세 번째 요점은 정확합니다. DataOutputStream을 사용 했는데도 예외가 발생하지 않습니다. 이제 내 의심은 어떻게 삭제 된 파일에 쓰기를 시도해도 예외가 발생하지 않는다는 것입니다. –

+0

@mynameisGYAN 이렇게하면 두 가지 잘못된 가정이 남게됩니다. – EJP

+0

@downvoter 설명해주십시오. – EJP