Detectar o formato do ficheiro e verificar a compatibilidade do formato

Às vezes, é necessário determinar o formato de um documento antes de abrir, porque a extensão do arquivo não garante que o conteúdo do arquivo seja apropriado. Por exemplo, sabe-se que o Crystal Reports apresenta frequentemente documentos no formato RTF, mas fornece-lhes o.extensão doc.

Aspose.Words permite obter informações sobre o tipo de ficheiro, a fim de evitar uma excepção se não tiver a certeza do conteúdo real do ficheiro.

Detectar o formato do Ficheiro sem excepção

Quando se trata de vários documentos em vários formatos de ficheiro, pode ser necessário separar os ficheiros que podem ser processados por Aspose.Words daqueles que não podem. Talvez queira também saber por que razão alguns dos documentos não podem ser tratados.

Se você tentar carregar um arquivo em um objeto Document e Aspose.Words não puder reconhecer o formato do arquivo ou o formato não for suportado, Aspose.Words lançará uma exceção. Você pode capturar essas exceções e analisá-las, mas Aspose.Words também fornece o método DetectFileFormat que nos permite determinar rapidamente o formato do arquivo sem carregar um documento com possíveis exceções. Este método retorna um objeto FileFormatInfo que contém as informações detectadas sobre o tipo de arquivo.

Verificar A Compatibilidade Do Formato Dos Ficheiros

Podemos verificar a compatibilidade de formatos de todos os ficheiros da pasta seleccionada e classificá-los por formato nas subpastas correspondentes.

Como estamos lidando com conteúdo em uma pasta, a primeira coisa que precisamos fazer é obter uma coleção de todos os arquivos nesta pasta usando o método GetFiles da classe Directory (do namespace System.IO).

O exemplo de código a seguir mostra como obter uma lista de todos os arquivos na pasta:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
File[] fileList = new File(dataDir).listFiles();

Quando todos os arquivos são coletados, o restante do trabalho é feito pelo método DetectFileFormat, que verifica o formato do arquivo.

O exemplo de código a seguir mostra como iterar sobre a lista coletada de arquivos, verificar o formato de cada arquivo e mover cada arquivo para a pasta apropriada:

// 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;
}
}
}

Os arquivos são movidos para subpastas apropriadas usando o método Move da classe File, do mesmo namespace System.IO.

Os seguintes ficheiros são utilizados no exemplo acima. O nome do ficheiro está à esquerda e a sua descrição está à direita:

Grupo de Ficheiros Documento De Entrada Tipo
Formatos de ficheiro suportados Test File (Doc).doc Microsoft Word 95/6.0 ou Microsoft Word 97 – 2003 documento.
Test File (Dot).dot Modelo Microsoft Word 95/6.0 ou Microsoft Word 97 – 2003.
Test File (Docx).docx Office abrir XML WordprocessingML documento sem macros.
Test File (Docm).docm Office abrir XML WordprocessingML documento com macros.
Test File (Dotx).dotx Escritório aberto XML WordprocessingML modelo.
Test File (Dotm).dotm Office abrir XML WordprocessingML modelo com macros.
Test File (XML).xml FlatOPC OOXML Documento.
Test File (RTF).rtf Documento em formato Rich Text.
Test File (WordML).xml Microsoft Word documento de 2003 WordprocessingML.
Test File (HTML).html HTML documento.
Test File (MHTML).mhtml MHTML (arquivo Web) documento.
Test File (Odt).odt OpenDocument Texto (OpenOffice Escritor).
Test File (Ott).ott OpenDocument Modelo De Documento.
Test File (DocPreWord60).doc Microsoft Word 2.0 documento.
Documentos encriptados Test File (Enc).doc Documento encriptado Microsoft Word 95 / 6.0 ou Microsoft Word 97 – 2003.
Test File (Enc).docx Escritório encriptado Abrir XML WordprocessingML documento.
Formatos de ficheiro não suportados Test File (JPG).jpg JPEG ficheiro de imagem.