Working with large PST files

Contents
[ ]

Performance may be degraded when processing large PST files. The following suggestions will help improve the performance of your app when processing large files.

try (PersonalStorage pst = PersonalStorage.fromFile("storage.pst")) { for (FolderInfo folder : pst.getRootFolder().enumerateFolders()) for (MessageInfo messageInfo : folder.enumerateMessages()) { // Do something with message  } } 
for (MessageInfo messageInfo : folder.enumerateMessages()) { System.out.println("Subject: " + messageInfo.getSubject()); System.out.println("To: " + messageInfo.getDisplayTo()); System.out.println("Importance: " + messageInfo.getImportance()); System.out.println("Message Class: " + messageInfo.getMessageClass()); } 
for (String id : folder.enumerateMessagesEntryId()) { // Use id to retrieve a property (extractProperty),  // extract a MapiMessage (extractMessage),  // extarct message attachments (extractAttachments),  // save msg to a stream (saveMessageToStream). } 
for (String msgId : folder.enumerateMessagesEntryId()) { String transportMessageHeaders = pst.extractProperty(org.apache.commons.codec.binary.Base64.decodeBase64(msgId), KnownPropertyList.TRANSPORT_MESSAGE_HEADERS.getTag()).getString(); } 
for (String msgId : folder.enumerateMessagesEntryId()) { MapiAttachmentCollection attachments = pst.extractAttachments(msgId); } 
try (PersonalStorage pst = PersonalStorage.fromFile("storage.pst")) { PersonalStorageQueryBuilder builder = new PersonalStorageQueryBuilder(); // Unread messages  builder.hasNoFlags(MapiMessageFlags.MSGFLAG_READ); for (FolderInfo folder : pst.getRootFolder().enumerateFolders()) { MessageInfoCollection unread = folder.getContents(builder.getQuery()); } } 

Instead of using:

for (String id : folder.enumerateMessagesEntryId()) { MapiMessage msg = pst.extractMessage(id); msg.save("message.msg"); } 

Use:

for (String id : folder.enumerateMessagesEntryId()) { try (OutputStream fos = new FileOutputStream("message.msg")) { pst.saveMessageToStream(id, fos); } }