Определение формата файла и проверка совместимости форматов

Иногда необходимо определить формат документа перед открытием, поскольку расширение файла не гарантирует, что содержимое файла соответствует действительности. Например, известно, что Crystal Reports часто выводит документы в формате RTF, но присваивает им расширение .doc.

Aspose.Words предоставляет возможность получения информации о типе файла, чтобы избежать исключения, если вы не уверены в фактическом содержимом файла.

Определение формата файла без каких-либо исключений

Когда вы имеете дело с несколькими документами в различных форматах, вам может потребоваться отделить те файлы, которые могут быть обработаны с помощью Aspose.Words, от тех, которые не могут. Возможно, вы также захотите узнать, почему некоторые документы не могут быть обработаны.

Если вы попытаетесь загрузить файл в объект Document и Aspose.Words не сможет распознать формат файла или формат не поддерживается, Aspose.Words вызовет исключение. Вы можете перехватить эти исключения и проанализировать их, но Aspose.Words также предоставляет метод DetectFileFormat, который позволяет нам быстро определить формат файла, не загружая документ с возможными исключениями. Этот метод возвращает объект FileFormatInfo, содержащий обнаруженную информацию о типе файла.

Проверьте совместимость форматов файлов

Мы можем проверить совместимость форматов всех файлов в выбранной папке и отсортировать их по формату в соответствующие подпапки.

Поскольку мы имеем дело с содержимым папки, первое, что нам нужно сделать, это получить коллекцию всех файлов в этой папке, используя метод GetFiles класса Directory (из пространства имен 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;
}
}
}

Файлы перемещаются в соответствующие подпапки с помощью метода Move класса File из того же пространства имен System.IO.

В приведенном выше примере используются следующие файлы. Название файла указано слева, а его описание - справа:

Группа файлов Входной документ Тип
Поддерживаемые форматы файлов Test File (Doc).doc Microsoft Word 95/6.0 или Microsoft Word 97 – документ 2003 года.
Test File (Dot).dot Microsoft Word 95/6.0 или Microsoft Word 97 – шаблон 2003 года.
Test File (Docx).docx Office Открывает XML WordprocessingML документ без макросов.
Test File (Docm).docm Откройте в Office XML WordprocessingML документ с помощью макросов.
Test File (Dotx).dotx Шаблон Office Open XML WordprocessingML.
Test File (Dotm).dotm Шаблон Office Open XML WordprocessingML с макросами.
Test File (XML).xml FlatOPC OOXML Документ.
Test File (RTF).rtf Документ в формате Rich Text.
Test File (WordML).xml Microsoft Word документ 2003 года WordprocessingML.
Test File (HTML).html HTML документ.
Test File (MHTML).mhtml MHTML документ (веб-архив).
Test File (Odt).odt OpenDocument Текст (OpenOffice Автор).
Test File (Ott).ott OpenDocument Шаблон документа.
Test File (DocPreWord60).doc Microsoft Word 2.0 документ.
Зашифрованные документы Test File (Enc).doc Зашифрованный документ Microsoft Word 95/6.0 или Microsoft Word 97 – 2003.
Test File (Enc).docx Зашифрованный офис Открывает XML WordprocessingML документ.
Неподдерживаемые форматы файлов Test File (JPG).jpg JPEG файл изображения.