Bestandsformaat detecteren en compatibiliteit controleren
Soms is het nodig om het formaat van een document te bepalen voordat u opent omdat de bestandsextensie niet garandeert dat de inhoud van het bestand geschikt is. Bijvoorbeeld, het is bekend dat Crystal Reports vaak uitvoert documenten in RTF-formaat, maar geeft hen de .doc extensie.
Aspose.Words biedt een mogelijkheid om informatie over het bestandstype te verkrijgen om een uitzondering te voorkomen als u niet zeker bent wat de werkelijke inhoud van het bestand is.
Bestandsformaat detecteren zonder uitzondering
Wanneer u te maken hebt met meerdere documenten in verschillende bestandsformaten, kunt u nodig hebben om de bestanden die kunnen worden verwerkt door Aspose.Words Van degenen die dat niet kunnen. U wilt misschien ook weten waarom sommige documenten niet kunnen worden verwerkt.
Als u een bestand in een Document object en Aspose.Words kan het bestandsformaat niet herkennen of het formaat wordt niet ondersteund; Aspose.Words Ik zal een uitzondering maken. Je kunt die uitzonderingen vangen en analyseren, maar Aspose.Words de DetectFileFormat methode waarmee we snel het bestandsformaat kunnen bepalen zonder een document te laden met mogelijke uitzonderingen. Deze methode geeft een FileFormatInfo object dat de gedetecteerde informatie over het bestandstype bevat.
Controleer Bestanden Format Compatibiliteit
We kunnen de formaatcompatibiliteit van alle bestanden in de geselecteerde map controleren en sorteren op formaat in overeenkomstige submappen.
Aangezien we te maken hebben met inhoud in een map, het eerste wat we moeten doen is een verzameling van alle bestanden in deze map met behulp van de GetFiles methode van de Directory
klasse (van System.IO
naamruimte).
Het volgende voorbeeld van code laat zien hoe je een lijst van alle bestanden in de map krijgt:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java | |
File[] fileList = new File(dataDir).listFiles(); |
Wanneer alle bestanden worden verzameld, de rest van het werk wordt gedaan door de DetectFileFormat methode, die het bestandsformaat controleert.
Het volgende voorbeeld van code laat zien hoe je kunt itereren over de verzamelde lijst van bestanden, controleer het formaat van elk bestand en verplaatst elk bestand naar de juiste map:
// 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; | |
} | |
} | |
} |
De bestanden worden verplaatst naar geschikte submappen met behulp van de Move
methode van de File
klasse, van dezelfde System.IO
naamruimte.
De volgende bestanden worden in het voorbeeld hierboven gebruikt. De bestandsnaam staat links en de beschrijving is rechts:
Group van bestanden | Invoerdocument | Type |
---|---|---|
Ondersteunde bestandsformaten | Testbestand (doc.doc) | Microsoft Word 95/6 of Microsoft Word 97 Document 2003. |
Testbestand (Dot).dot | Microsoft Word 95/6 of Microsoft Word 97 Model 2003. | |
Testbestand (Docx).docx | Office Open XML Wordprocessing ML-document zonder macros. | |
Testbestand (Docm).docm | Office Open XML Wordprocessing ML document met macro’s. | |
Testbestand (Dotx).dotx | Office Open XML Wordprocessing ML template. | |
Testbestand (Dotm).dotm | Office Open XML Wordprocessing ML template met macro’s. | |
Testbestand (XML).xml | FlatOPC OOXML Document. | |
Testbestand (RTF).rtf | Rich Tekst Format document. | |
Testbestand (WordML).xml | Microsoft Word 2003 tekstverwerking ML document. | |
Testbestand (HTML).html | HTML-document. | |
Testbestand (MHTML).mhtml | MHTML (Web archief) document. | |
Testbestand (Odt).odt | OpenDocument Tekst (OpenOffice Writer). | |
Testbestand (Ott).ott | OpenDocument Document Sjabloon. | |
Testbestand (DocPreWord60).doc | Microsoft Word 2.0 document. | |
Versleutelde documenten | Testbestand (Enc).doc | Versleuteld Microsoft Word 95/6 of Microsoft Word 97 Document 2003. |
Testbestand (Enc).docx | Versleutelde Office Open XML Wordprocessing ML document. | |
Niet ondersteunde bestandsformaten | Testbestand (JPG). jpg | JPEG-imagebestand. |