2013-04-10 4 views
0

이것은 바보 같은 질문 일지 모르지만 다른 곳에서는 답을 찾을 수 없었습니다. 저장을 위해 파일을 읽고 쓸 클래스가 있습니다. 지금, 나는 내 방식으로 올 수있는 몇 가지 가능한 오류를 처리하려고합니다. 내가 알고 싶은 것은이 자바 법적 또는 관행 인 경우입니다 :catch 블록에서 예외 처리?

try { 
    in = new ObjectInputStream(new FileInputStream(fileName)); 
    score = (Score)in.readObject(); 
} catch() { 
    ... 
} 

난 데 문제는 파일이 비어있는 경우,이 파일을 읽을 수 있습니다. 프로그램이 중단 될 것이므로 catch 문에서 파일의 일부 데이터를 작성한 후 일반/실습을 시도한 다음 다시 시도하십시오. 그런 다음 두 번째 캐치에서 프로그램을 중단시킬 수 있습니다.

내가 이런 식으로하고 싶어하는 이유는 사용자가 파일의 데이터를 지우는 경우입니다.

합법적 인 경우 구문인가요?

try { 
    // try something here 
} catch(//Exception here) { 
    // Create a new file and try again. 
    try { 
     // try again 
    } catch() { 
     // Crash the program 
    } 
} 

답변

1

은 왜 그냥 파일이 존재하지 않는 경우 확인하거나 당신이 시도하고 그것을 사용하기 전에 비어하지?

사용자가이 파일의 존재를 확인하고, 실제로 FileInputStream 내에서 사용시 사이의 파일을 삭제하는 것이 가능하다 작은 경쟁 조건이 있음을
try { 
    File file = new File(fileName); 
    if(!file.exists() || file.length() == 0) { 
     // Create the file, initialize it with some default value 
    } 
    in = new ObjectInputStream(new FileInputStream(file)); 
    score = (Score)in.readObject(); 
} catch() { 
    ... 
} 

참고.

+0

예를 들어 확실히 실용적인 솔루션처럼 보입니다. 나는 너무 오랫동안 생각 해왔다. –

0

일반적으로 catch 블록에서 이와 같은 작업을 수행하는 것은 나쁜 형식입니다. 실패한 경우 재 시도를 수행하려면 루프를 사용하십시오.

int retryCount = 0; 
boolean success = false; 
while(!success && retryCount < 2) { 
    retryCount++; 
    try { 
     ... 
     success = true; 
    } catch (Exception ex) { 
     // log exception 
    } 
} 
+0

어디서 얻는지는 알지만, 이렇게하면 동일한 코드가 다시 표시됩니다. 따라서 첫 번째 시도가 실패하면 파일이 만들어지지 않습니다. 만약 내가 이렇게하면, 내가 할 수있는 유일한 생각은 while look 안에 if 문을 만들 것이고, 그것은 우리가 두 번째 시도에 있는지를 검사 할 것이다. 그러면 파일을 만든 다음 시도해 봅니다. 이 나쁜 형 태도 아닌가? –

+0

이상적은 아니지만 catch 블록의 재 시도를 통해 재시도 루프에서 if 문이 추악한 것을 선호합니다. 나는 더 깨끗한 대안이 있었으면 좋겠지 만, 나는 공백을 그릴 것이다. –

관련 문제