2013-07-17 2 views
0

내 프로젝트에 nu.xom.*을 사용하고 있습니다. 링크는 http://www.xom.nu/입니다. 내 질문은 내 코드의 다음 부분에 관한 것입니다 : Java : nu.xom.Builder가 파일을 올바르게 닫습니까?

private void open() { 
    builder = new Builder(); 
    try { 
     document = builder.build(file); 
    } catch (ParsingException | IOException ex) { 
     Logger.getLogger(InvoiceData.class.getName()).log(Level.SEVERE, null, ex); 
    } 
} 

내가 내 프로그램에서 원하지 않는 파일 잠금을 가지고 실질적으로 내가 파일을 열 모든 장소를 확인하고 있습니다. 이제는 builder.build(File file)Closeable을 구현한다는 사실을 여기에서 깨달았습니다. 따라서 파일을 제대로 닫을 지 확신 할 수 없습니다.

누구든지이 문제에 대해 의견을 개진 할 수 있습니까?

감사합니다.

답변

0

다행히 XOM 라이브러리는 nu.xom.Builder.build(File)source 코드를 살펴 취할 수 있도록 오픈 소스입니다 :

public Document build(File in) 
    throws ParsingException, ValidityException, IOException { 

    InputStream fin = new FileInputStream(in); 
    // [...] 
    String base = url.toString(); 
    try { 
     Document doc = build(fin, base); 
     return doc; 
    } 
    finally { 
     fin.close(); 
    } 

} 

그래서 당신이 build() 방법에 File 인스턴스를 전달하고이 방법 안에 FileInputStream가 열립니다를 끝에서 닫혔다.

new FileInputStream(in) 다음에 오는 부분이 try 블록으로 묶여 있지 않습니다. 이 코드가 체크되지 않는 예외를 throw하면 (자), 입력 스트림이 닫혀지지 않은 가능성이 있습니다. 하지만 예외가 발생하지 않으면 입력 스트림이 제대로 닫혔다는 것을 확신 할 수 있습니다.