texto - ¿Cómo cerrar un archivo PST en Java?
insertar/modificar/eliminar datos de un txt en java (3)
Al leer el código, es evidente que libpst no expone un método de "cierre". El método finalize()
cierra el archivo subyacente cuando se recolecta el archivo PSTFile
, por lo que recomiendo usarlo en el ámbito más pequeño posible y eliminarlo lo antes posible, pero aparte de eso no hay mucho que pueda hacer (excepto los informes un problema para el proyecto (o mejor aún, enviar un parche, por supuesto).
EDITAR 1:
PSTFile
tiene un método getFileHandle()
que devuelve el archivo subyacente, por lo que podría close()
que:
PSTFile pstFile = new PSTFile("Path of the pst file");
// use the file
pstFile.getFileHandle().close();
EDIT 2:
He creado una solicitud de extracción para agregar PSTFile.close()
. Vamos a ver cómo se apaga.
EDITAR 3:
Mi solicitud de extracción se ha fusionado (¡gracias Richard Johnson!). En la próxima versión (o si creas java-libpst por ti mismo) podrás llamar a close()
directamente en un PSTFile
.
Estoy usando java-libpst.0.7.jar para leer los mensajes PST. Estoy usando el siguiente código para abrir el archivo PST para leer los mensajes.
PSTFile pstFile = new PSTFile("Path of the pst file");
Tengo que cerrar el archivo PST una vez después de recibir los detalles del mensaje. Pero no hay opción para cerrar el archivo PST. ¿Cómo puedo hacer esto?
Como dijo @RC, la biblioteca no expone un método de cierre. Mire https://github.com/rjohnsondev/java-libpst/blob/master/src/main/java/com/pff/PSTFile.java . El autor anuló el método finalize (), esperando que el Stream se cierre mágicamente en la recolección de basura.
/**
* destructor just closes the file handle...
*/
@Override
protected void finalize() throws IOException {
in.close();
}
Sin embargo, la recolección de basura no está garantizada a lo largo de la vida de la aplicación, y aún así, la ejecución de finalize () tampoco. Vea uno de los muchos artículos en la red que explica por qué: http://howtodoinjava.com/2012/10/31/why-not-to-use-finalize-method-in-java/ .
Mi consejo sería buscar una biblioteca más "probada" o, si no es posible, cambiar ese archivo para exponer un método de cierre explícito y reconstruirlo.
PSTFile
cierra el PSTFile
en su método de finalize
, por lo que el archivo se cierra cuando se recolecta el archivo PSTFile
. No creo que este sea un buen estilo para limpiar los recursos de esta manera porque la finalize
puede llamarse mucho más tarde o incluso nunca.