检测文件格式并检查格式兼容性
有时有必要在打开之前确定文档的格式,因为文件扩展名不能保证文件的内容是适当的。 例如,已知Crystal Reports经常以RTF格式输出文档,但给出了。doc扩展。
Aspose.Words提供了获取有关文件类型的信息的功能,以便在不确定文件的实际内容时避免异常。
无一例外地检测文件格式
当您处理各种文件格式的多个文档时,您可能需要将可以由Aspose.Words处理的文件与不能处理的文件分开。 您可能还想知道为什么某些文档无法处理。
如果您尝试将文件加载到Document对象中,并且Aspose.Words无法识别文件格式或不支持该格式,Aspose.Words将引发异常。 您可以捕获这些异常并对其进行分析,但Aspose.Words还提供了DetectFileFormat方法,使我们能够快速确定文件格式,而无需加载带有可能异常的文档。 此方法返回一个FileFormatInfo对象,其中包含检测到的有关文件类型的信息。
检查文件格式兼容性
我们可以检查所选文件夹中所有文件的格式兼容性,并按格式将它们排序到相应的子文件夹中。
由于我们正在处理文件夹中的内容,因此我们需要做的第一件事是使用Directory
类的GetFiles方法(来自System.IO
命名空间)获取此文件夹中所有文件的集合。
下面的代码示例演示如何获取文件夹中所有文件的列表:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java | |
File[] fileList = new File(dataDir).listFiles(); |
当收集到所有文件时,其余的工作由DetectFileFormat方法完成,该方法检查文件格式。
下面的代码示例演示如何遍历收集的文件列表,检查每个文件的格式,并将每个文件移动到相应的文件夹:
// 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; | |
} | |
} | |
} |
使用File
类的Move
方法,从相同的System.IO
命名空间将文件移动到适当的子文件夹中。
上面的示例中使用了以下文件。 文件名在左边,其描述在右边:
文件组 | 输入文件 | 类型 |
---|---|---|
支持的文件格式 | Test File (Doc).doc | Microsoft Word95/6.0或Microsoft Word97-2003文件。 |
Test File (Dot).dot | Microsoft Word95/6.0或Microsoft Word97-2003模板。 | |
Test File (Docx).docx | Office打开没有宏的XMLWordprocessingML文档。 | |
Test File (Docm).docm | Office使用宏打开XMLWordprocessingML文档。 | |
Test File (Dotx).dotx | Office OpenXMLWordprocessingML模板。 | |
Test File (Dotm).dotm | Office使用宏打开XMLWordprocessingML模板。 | |
Test File (XML).xml | FlatOPCOOXML文件。 | |
Test File (RTF).rtf | 富文本格式文档。 | |
Test File (WordML).xml | Microsoft Word2003WordprocessingML文件。 | |
Test File (HTML).html | HTML文件。 | |
Test File (MHTML).mhtml | MHTML(Web存档)文档。 | |
Test File (Odt).odt | OpenDocument文本(OpenOffice作家)。 | |
Test File (Ott).ott | OpenDocument文档模板。 | |
Test File (DocPreWord60).doc | Microsoft Word2.0文件。 | |
加密文档 | Test File (Enc).doc | 加密的Microsoft Word95/6.0或Microsoft Word97–2003文档。 |
Test File (Enc).docx | 加密的Office OpenXMLWordprocessingML文档。 | |
不支持的文件格式 | Test File (JPG).jpg | JPEG图像文件。 |