PST 메시지를 읽는 데 java-libpst.0.7.jar을 사용하고 있습니다. 메시지를 읽으려면 PST 파일을 열려면 다음 코드를 사용하고 있습니다.Java에서 PST 파일을 닫는 방법?
PSTFile pstFile = new PSTFile("Path of the pst file");
메시지 세부 정보를받은 후 한 번 PST 파일을 닫아야합니다. 그러나 PST 파일을 닫을 수있는 옵션이 없습니다. 어떻게해야합니까?
PST 메시지를 읽는 데 java-libpst.0.7.jar을 사용하고 있습니다. 메시지를 읽으려면 PST 파일을 열려면 다음 코드를 사용하고 있습니다.Java에서 PST 파일을 닫는 방법?
PSTFile pstFile = new PSTFile("Path of the pst file");
메시지 세부 정보를받은 후 한 번 PST 파일을 닫아야합니다. 그러나 PST 파일을 닫을 수있는 옵션이 없습니다. 어떻게해야합니까?
코드를 읽으면 libpst가 실제로 "닫기"메소드를 노출하지 않는다는 것이 확실합니다. finalize()
메서드는 PSTFile
가 가비지 수집 될 때 기본 파일을 닫습니다. 가능한 가장 작은 범위에서 사용하고 가능한 빨리 처리하는 것이 좋지만 그 외에는 수행 할 수있는 작업이 많지 않습니다 (reporting an issue to the project - 또는 제외). 물론, 패치를 직접 보내야합니다.)
편집 1 :
PSTFile pstFile = new PSTFile("Path of the pst file");
// use the file
pstFile.getFileHandle().close();
편집 2 : 나는 pull request을 만들었습니다
추가
PSTFile
이 기본 파일을 반환하는 getFileHandle()
방법을 가지고, 당신은 close()
그 수 있도록 PSTFile.close()
. 그것이 어떻게 부는 지 보자.
편집 3 :
내 요청이 병합되었습니다 (Richard Johnson!에게 감사드립니다). 다음 릴리스 (또는 직접 java-libpst를 빌드하는 경우)에서 PSTFile
에 close()
을 직접 호출 할 수 있습니다.
PSTFile
은 finalize
메서드에서 파일 핸들을 닫음으로써 PSTFile
가 가비지 수집 될 때 파일이 닫힙니다. finalize
이 훨씬 늦게 호출되거나 결코 호출되지 않을 수도 있기 때문에이 방법으로 리소스를 정리하는 것이 좋은 스타일이라고 생각하지 않습니다.
PST 파일을 읽을 수있는 응용 프로그램이 있습니다. 응용 프로그램이 다른 응용 프로그램에서 액세스하는 pst 파일을 읽을 수 없습니다. 위 코드를 사용하면 응용 프로그램이 pst 파일을 읽을 수 없습니다. 응용 프로그램을 다시 시작한 후 응용 프로그램을 읽을 수 있습니다. –
아마도 파일이 아직 닫혀 있지 않기 때문일 수 있습니다. 응용 프로그램을 종료하면 파일 핸들이 닫힙니다. Mureinik과 Adrian B.이 지적했듯이, 저는 현재의 상태에서 도서관을 사용하지 않을 것입니다. 아마도 PSTFile은 AutoCloseable을 구현할 수 있습니다. – Drunix
@RC와 마찬가지로 라이브러리는 닫기 메서드를 노출하지 않습니다. https://github.com/rjohnsondev/java-libpst/blob/master/src/main/java/com/pff/PSTFile.java을보십시오. 필자는 finalize() 메서드를 오버로드하여 스트림이 가비지 수집에서 마술로 닫힐 것으로 예상합니다.
/**
* destructor just closes the file handle...
*/
@Override
protected void finalize() throws IOException {
in.close();
}
그러나 가비지 수집은 응용 프로그램의 수명 기간 동안 보장되지 않으며, 그렇다고해서 finalize()도 실행되지 않습니다. 왜 그물에 많은 기사 중 하나를 참조하십시오 : http://howtodoinjava.com/2012/10/31/why-not-to-use-finalize-method-in-java/.
내 조언은 더 많은 "검증 된"라이브러리를 사용하거나 가능하지 않은 경우 해당 파일을 변경하여 명시적인 닫기 메소드를 노출하고 다시 빌드하는 것입니다.
PST 파일을 읽을 수있는 응용 프로그램이 있습니다. 응용 프로그램이 다른 응용 프로그램에서 액세스하는 pst 파일을 읽을 수 없습니다. 위 코드를 사용하면 응용 프로그램이 pst 파일을 읽을 수 없습니다. 응용 프로그램을 다시 시작한 후 응용 프로그램을 읽을 수 있습니다. –