PST メッセージの読み取りに java-libpst.0.7.jar を使用しています。次のコードを使用して PST ファイルを開いてメッセージを読んでいます。
PSTFile pstFile = new PSTFile("Path of the pst file");
メッセージの詳細を取得したら、一度 PST ファイルを閉じる必要があります。ただし、PST ファイルを閉じるオプションはありません。これどうやってするの?
コードを読むと、libpst が実際に「閉じる」メソッドを公開していないことが明らかです。このfinalize()メソッドはガベージ コレクションの際に基になるファイルを閉じるPSTFileため、可能な限り最小のスコープで使用し、できるだけ早く破棄することをお勧めしますが、それ以外にできることはあまりありません (問題をプロジェクト- またはもちろん、自分でパッチを送信することをお勧めします)。
EDIT 1:
PSTFile基になるファイルを返すメソッドがgetFileHandle()あるため、次のことができますclose()。
PSTFile pstFile = new PSTFile("Path of the pst file");
// use the file
pstFile.getFileHandle().close();
編集 2:を追加するプル リクエスト
を
作成しました。それがどのように広がるか見てみましょう。PSTFile.close()
編集 3:
プル リクエストがマージされました (Richard Johnson に感謝します!)。close()次のリリース (または自分で java-libpst をビルドした場合)では、PSTFile直接呼び出すことができます。
PSTFileそのメソッドでファイルハンドルを閉じるので、ガベージコレクションがfinalize行われるとファイルが閉じられます。PSTFileこの方法でリソースをクリーンアップするのは良いスタイルではないと思いますfinalize。
@RC が言ったように、ライブラリは close メソッドを公開しません。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() の実行も保証されません。理由を説明しているネット上の多くの記事の 1 つを参照してください: http://howtodoinjava.com/2012/10/31/why-not-to-use-finalize-method-in-java/。
私のアドバイスは、より「実績のある」ライブラリを使用するか、それが不可能な場合は、そのファイルを変更して明示的な close メソッドを公開し、再構築することです。