Baca file PST/OST yang rusak
Baca file PST/OST yang rusak
Kadang-kadang tidak mungkin membaca PST/OST karena beberapa masalah. Misalnya, beberapa blok data dapat rusak. Dalam kasus seperti itu, pengecualian biasanya muncul saat memanggil EnumerateFolders, EnumerateMessages, GetContents, GetSubfolders, dll. metode. Namun pesan atau folder individu mungkin tetap tidak rusak di dalam penyimpanan.
Pengguna Aspose.Email dapat menemukan pengidentifikasi item secara hirarkis. Selanjutnya, Anda dapat mengekstrak item berdasarkan pengidentifikasi. Untuk tujuan ini, perpustakaan menawarkan metode berikut:
- PersonalStorage.findMessages(String parentEntryId) - menemukan pengidentifikasi pesan untuk folder tersebut.
- PersonalStorage.findSubfolders(String parentEntryId) - menemukan pengidentifikasi subfolder untuk folder tersebut.
Catatan, bahwa meskipun ada kelebihan, terdapat penyimpanan yang rusak yang tidak dapat dibaca meskipun menggunakan metode ini.
Potongan kode berikut mendemonstrasikan penggunaan metode ini untuk membaca file PST/OST yang rusak:
try (PersonalStorage pst = PersonalStorage.fromFile(fileName)) {
exploreCorruptedPst(pst, pst.getRootFolder().getEntryIdString());
}
public static void exploreCorruptedPst(PersonalStorage pst, String rootFolderId) {
Iterable<String> messageIdList = pst.findMessages(rootFolderId);
for (String messageId : messageIdList) {
try {
MapiMessage msg = pst.extractMessage(messageId);
System.out.println("- " + msg.getSubject());
} catch (Exception e) {
System.out.println("Message reading error. Entry id: " + messageId);
}
}
Iterable<String> folderIdList = pst.findSubfolders(rootFolderId);
for (String subFolderId : folderIdList) {
if (subFolderId != rootFolderId) {
try {
FolderInfo subfolder = pst.getFolderById(subFolderId);
System.out.println(subfolder.getDisplayName());
} catch (Exception e) {
System.out.println("Message reading error. Entry id: " + subFolderId);
}
exploreCorruptedPst(pst, subFolderId);
}
}
}
Ekstrak Item PST dari File Rusak
API penelusuran memungkinkan mengekstrak semua item PST sejauh mungkin, tanpa menimbulkan pengecualian, bahkan jika sebagian data file asli rusak.
Gunakan PersonalStorage(TraversalExceptionsCallback callback) konstruktor dan load(String fileName) metode alih-alih fromFile metode.
Konstruktor memungkinkan mendefinisikan metode callback.
TraversalExceptionsCallback exceptionsCallback = new TraversalExceptionsCallback() {
@Override
public void invoke(TraversalAsposeException exception, String itemId) {
/* Exception handling code. */
}
};
try (PersonalStorage pst = new PersonalStorage(exceptionsCallback)) { }
Pengecualian pemuatan dan penelusuran akan tersedia melalui metode callback.
Metode load mengembalikan ’true’ jika file berhasil dimuat dan penelusuran selanjutnya memungkinkan. Jika file rusak dan tidak dapat ditelusuri, maka mengembalikan ‘false’.
if (currentPst.load(inputStream))
Contoh kode berikut menunjukkan cara mengimplementasikan API penelusuran file PST ke dalam sebuah proyek:
public static void main(String[] args) {
TraversalExceptionsCallback exceptionsCallback = new TraversalExceptionsCallback() {
@Override
public void invoke(TraversalAsposeException exception, String itemId) {
/* Exception handling code. */
}
};
try (PersonalStorage pst = new PersonalStorage(exceptionsCallback)) {
if (pst.load("test.pst")) {
getAllMessages(pst, pst.getRootFolder());
}
}
}
private static void getAllMessages(PersonalStorage pst, FolderInfo folder) {
for (String messageEntryId : folder.enumerateMessagesEntryId()) {
MapiMessage message = pst.extractMessage(messageEntryId);
}
for (FolderInfo subFolder : folder.getSubFolders()) {
getAllMessages(pst, subFolder);
}
}