2011-09-05 5 views
0

readinFile이라는 메서드가 있는데 사용자가 종료하는 대신 잘못된 파일을 입력하면 readinFile 메서드에서 readinFile 메서드를 다시 호출하여 새 파일 이름을 묻습니다. 내가 겪고있는 문제는 처음으로 문제가 발생하고 catch()를 통과하는 것보다 예외 파일을 찾을 수 없다는 것입니다. 메서드를 호출하고 마지막 inputStream을 실행하지 않도록합니다.예외가 발생하면 어떻게 메서드를 호출합니까?

try 
{ 
    inputStream = new Scanner(new FileInputStream(fileName)); 
} 
catch(FileNotFoundException E) 
{ 
    readinfile(table, numberOfColumns, header, 
       original, sntypes,displaySize, 
       writeOut,inputStream,fileName); 
    System.out.print("It got here after doing the method call");   
} 
+0

멋진 디자인은 아니지만 표시된 코드는 아주 적습니다. 소리 당신이 원하는대로해야합니다. 무슨 일이 일어나는지 명확하지 않습니다. 더 많은 코드를 제공해주십시오. –

+2

질문을 4 번 읽었으며 문제가 무엇인지 이해하지 못했습니다 – Bozho

+0

메서드 호출 이전의 상태로 돌아가는 것보다 파일을 읽습니다. – Ashley

답변

2

일반적으로 분기에는 예외를 사용하지 않아야합니다. 그냥과 같이, File.exists을 사용하여 파일의 존재하지 않는지 확인하십시오

new File(fileName).exists() 
+1

파일의 존재 여부와 실제 사용 (읽어야한다고 가정) 사이에 파일 시스템이 변경되었을 수 있으며 파일이 제거/이름 변경/수정되었을 수 있습니다. 그러므로 실제로 파일을 읽을 때, 다른 이유가 없다면, 파일이 여전히 존재한다고 가정 할 수 없으며,'FNFE'가 던져 질 수도 있습니다! –

+0

그래,하지만 그건 아주 예외적 인 예외 인 Scenerio이다. 반면 사용자 입력 후 File이 존재하지 않는 것은 정상적인 흐름입니다. –

2

을 당신은 아마 이런 걸하고 싶지 :

String fileName; 

do { 
    System.out.println("Please enter filename"); 
    fileName = getFileNameFromInput(); 
    File file = new File(fileName); 
} while (!file.exists()); 

readFile(file); 

편집 :

브루노리스가 지적한대로를 이 옵션은 사용자가 파일 이름을 지정한 경우에만 파일이 존재하는지 확인합니다. 파일 이름을 지정하고 읽을 때 파일을 이동/삭제하려면 FileNotFoundException이 여전히 발생합니다. 이 위험을 줄이려면 this question에 설명 된대로 파일을 잠글 수 있습니다.

+0

아래와 같습니다 :'readFile'의 코드가 실행되면 파일이'file.exists()'검사에 존재하더라도 삭제되었을 수 있습니다 .' readFile'의 코드는 처리 할 준비가되어 있어야합니다 'FNFException' (어떤 이유로 파일이 존재하면 그 파일을 제거 할 수 없다는 것을 보증 할 수 없다면) –

+0

그의 원래 try catch가 아마도 가장 간단한 해결책 일 것입니다. – luketorjussen

0
bool invalidFilename = true; 
string fileName; 

while(invalidFilename) 
{ 
    readinfile(...); 
    invalidFilename = !new File(fileName).exists(); 
} 

inputStream = new Scanner(new FileInputStream(fileName)); 
0

사용자 입력 파일 이름이 존재하는지 여부를 확인할 수 있으며 예외를 포착 할 필요가 없습니다. 당신이 후에 무엇을 얻으려면

당신이 할 수있는, ...이 의사

if (!new File(filename).exists()){ 
    //read your other file from user 
    readinfile(....) 

} 
+0

예외를 잡아야합니다. 확인 된 예외입니다. – TofuBeer

0

inflagranti 말했듯을 (좋은 디자인 코드를하지 않은 코드의 가독성을 감소) , 파일을 확인한 후에 삭제할 가능성은 없지만 파일을 열기 전에 다음과 같은 작업을 수행하십시오.

boolean done = false; 
String fileName = fileNameParameter; 

while(!done) 
{ 
    try 
    { 
     inputStream = new Scanner(new FileInputStream(fileName)); 
     done = true; 
    } 
    catch(FileNotFoundException E) 
    { 
     fileName = /* ask the user for the file name */ 
    } 
} 
관련 문제