Wykrywanie formatu pliku i sprawdzanie kompatybilności formatu
Czasami konieczne jest określenie formatu dokumentu przed otwarciem, ponieważ rozszerzenie pliku nie gwarantuje, że zawartość pliku jest odpowiednia. Na przykład wiadomo, że Crystal Reports często wysyła dokumenty w formacie RTF, ale daje im rozszerzenie .doc.
Aspose.Words zapewnia możliwość uzyskania informacji o typie pliku w celu uniknięcia wyjątku, jeśli nie jesteś pewien, jaka jest rzeczywista zawartość pliku.
Wykrywanie formatu pliku bez wyjątku
Kiedy masz do czynienia z wieloma dokumentami w różnych formatach plików, może być konieczne oddzielenie tych plików, które mogą być przetwarzane przez Aspose.Words od tych, którzy nie mogą. Możesz również chcieć wiedzieć, dlaczego niektóre dokumenty nie mogą być przetwarzane.
Jeśli próbujesz załadować plik do Document obiekt i Aspose.Words nie może rozpoznać formatu pliku lub format nie jest obsługiwany, Aspose.Words Rzuci wyjątek. Można złapać te wyjątki i analizować je, ale Aspose.Words zapewnia również DetectFileFormat metoda, która pozwala nam szybko określić format pliku bez wczytywania dokumentu z ewentualnymi wyjątkami. Ta metoda zwraca a FileFormatInfo obiekt, który zawiera wykryte informacje o typie pliku.
Sprawdź kompatybilność formatu plików
Możemy sprawdzić kompatybilność formatów wszystkich plików w wybranym folderze i sortować je w formacie do odpowiednich podfolderów.
Ponieważ mamy do czynienia z zawartością w folderze, pierwszą rzeczą, którą musimy zrobić jest zebranie wszystkich plików w tym folderze za pomocą GetFiles Metoda Directory
klasa (z System.IO
).
Poniższy przykład kodu pokazuje jak uzyskać listę wszystkich plików w folderze:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java | |
File[] fileList = new File(dataDir).listFiles(); |
Kiedy wszystkie pliki są zbierane, reszta pracy jest wykonywana przez DetectFileFormat metoda, która sprawdza format pliku.
Poniższy przykład kodu pokazuje, jak iteracować nad zebraną listą plików, sprawdzić format każdego pliku i przenieść każdy plik do odpowiedniego folderu:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java | |
// The path to the documents directory. | |
String dataDir = Utils.getDataDir(CheckFormatCompatibility.class); | |
String supportedDir = dataDir + "OutSupported" + File.separator; | |
String unknownDir = dataDir + "OutUnknown" + File.separator; | |
String encryptedDir = dataDir + "OutEncrypted" + File.separator; | |
String pre97Dir = dataDir + "OutPre97" + File.separator; | |
File[] fileList = new File(dataDir).listFiles(); | |
// Loop through all found files. | |
for (File file : fileList) { | |
if (file.isDirectory()) | |
continue; | |
// Extract and display the file name without the path. | |
String nameOnly = file.getName(); | |
System.out.print(nameOnly); | |
// Check the file format and move the file to the appropriate folder. | |
String fileName = file.getPath(); | |
FileFormatInfo info = FileFormatUtil.detectFileFormat(fileName); | |
// Display the document type. | |
switch (info.getLoadFormat()) { | |
case LoadFormat.DOC: | |
System.out.println("\tMicrosoft Word 97-2003 document."); | |
break; | |
case LoadFormat.DOT: | |
System.out.println("\tMicrosoft Word 97-2003 template."); | |
break; | |
case LoadFormat.DOCX: | |
System.out.println("\tOffice Open XML WordprocessingML Macro-Free Document."); | |
break; | |
case LoadFormat.DOCM: | |
System.out.println("\tOffice Open XML WordprocessingML Macro-Enabled Document."); | |
break; | |
case LoadFormat.DOTX: | |
System.out.println("\tOffice Open XML WordprocessingML Macro-Free Template."); | |
break; | |
case LoadFormat.DOTM: | |
System.out.println("\tOffice Open XML WordprocessingML Macro-Enabled Template."); | |
break; | |
case LoadFormat.FLAT_OPC: | |
System.out.println("\tFlat OPC document."); | |
break; | |
case LoadFormat.RTF: | |
System.out.println("\tRTF format."); | |
break; | |
case LoadFormat.WORD_ML: | |
System.out.println("\tMicrosoft Word 2003 WordprocessingML format."); | |
break; | |
case LoadFormat.HTML: | |
System.out.println("\tHTML format."); | |
break; | |
case LoadFormat.MHTML: | |
System.out.println("\tMHTML (Web archive) format."); | |
break; | |
case LoadFormat.ODT: | |
System.out.println("\tOpenDocument Text."); | |
break; | |
case LoadFormat.OTT: | |
System.out.println("\tOpenDocument Text Template."); | |
break; | |
case LoadFormat.DOC_PRE_WORD_60: | |
System.out.println("\tMS Word 6 or Word 95 format."); | |
break; | |
case LoadFormat.UNKNOWN: | |
default: | |
System.out.println("\tUnknown format."); | |
break; | |
} | |
// Now copy the document into the appropriate folder. | |
if (info.isEncrypted()) { | |
System.out.println("\tAn encrypted document."); | |
fileCopy(fileName, new File(encryptedDir, nameOnly).getPath()); | |
} else { | |
switch (info.getLoadFormat()) { | |
case LoadFormat.DOC_PRE_WORD_60: | |
fileCopy(fileName, new File(pre97Dir + nameOnly).getPath()); | |
break; | |
case LoadFormat.UNKNOWN: | |
fileCopy(fileName, new File(unknownDir + nameOnly).getPath()); | |
break; | |
default: | |
fileCopy(fileName, new File(supportedDir + nameOnly).getPath()); | |
break; | |
} | |
} | |
} |
Pliki są przenoszone do odpowiednich podfolderów za pomocą Move
Metoda File
klasa, od tego samego System.IO
przestrzeń nazw.
Następujące pliki są używane w powyższym przykładzie. Nazwa pliku jest po lewej stronie, a jej opis po prawej:
Group plików | Dokument wejścia | Rodzaj |
---|---|---|
Obsługiwane formaty plików | Plik testowy (Doc) .doc | Microsoft Word 95 / 6, 0 lub Microsoft Word Dokument 97 - 2003. |
Plik testowy (Dot) .dot | Microsoft Word 95 / 6, 0 lub Microsoft Word Wzór formularza 97 - 2003. | |
Plik testowy (Docx) .docx | Office Open XML Wordprocessing Dokument ML bez makr. | |
Plik testowy (Docm) .docm | Office Open XML Wordprocessing Dokument ML z makrami. | |
Plik testowy (Dotx) .dotx | Office Open XML Wordprocessing Wzór ML. | |
Plik testowy (Dotm) .dotm | Office Open XML Wordprocessing Szablon ML z makrami. | |
Plik testowy (XML) .xml | Dokument OOXML FlatoPC. | |
Plik testowy (RTF) .rtf | Rich Text Format Document. | |
Plik testowy (WordML) .xml | Microsoft Word 2003 Wordprocessing Dokument ML. | |
Test File (HTML) .html | Dokument HTML. | |
Plik testowy (MHTML) .mhtml | Dokument MHTML (Web Archive). | |
Plik testowy (ODT) .odt | Tekst OpenDocument (OpenOffice Writer). | |
Plik testowy (Ott) .ott | Szablon dokumentu OpenDocument. | |
Plik testowy (DocPreWord60) .doc | Microsoft Word 2.0 dokument. | |
Zaszyfrowane dokumenty | Plik testowy (Enc) .doc | Zaszyfrowane Microsoft Word 95 / 6, 0 lub Microsoft Word Dokument 97 - 2003. |
Plik testowy (Enc) .docx | Szyfrowane Office Open XML Wordprocessing Dokument ML. | |
Nieobsługiwane formaty plików | Test File (JPG). jpg | Plik obrazu JPEG. |