Detecte el Formato de Archivo y Verifique la Compatibilidad del Formato

A veces es necesario determinar el formato de un documento antes de abrirlo porque la extensión del archivo no garantiza que el contenido del archivo sea el adecuado. Por ejemplo, se sabe que Crystal Reports a menudo genera documentos en formato RTF, pero les da el .extensión doc.

Aspose.Words proporciona la capacidad de obtener información sobre el tipo de archivo para evitar una excepción si no está seguro de cuál es el contenido real del archivo.

Detecte el Formato de Archivo sin excepción

Cuando se trata de varios documentos en varios formatos de archivo, es posible que deba separar los archivos que pueden procesarse con Aspose.Words de los que no pueden. También es posible que desee saber por qué no se pueden procesar algunos de los documentos.

Si intenta cargar un archivo en un objeto Document y Aspose.Words no puede reconocer el formato de archivo o el formato no es compatible, Aspose.Words generará una excepción. Puede detectar esas excepciones y analizarlas, pero Aspose.Words también proporciona el método DetectFileFormat que nos permite determinar rápidamente el formato de archivo sin cargar un documento con posibles excepciones. Este método devuelve un objeto FileFormatInfo que contiene la información detectada sobre el tipo de archivo.

Comprobar la Compatibilidad de Formatos de Archivos

Podemos verificar la compatibilidad de formato de todos los archivos en la carpeta seleccionada y ordenarlos por formato en las subcarpetas correspondientes.

Dado que estamos tratando con el contenido de una carpeta, lo primero que debemos hacer es obtener una colección de todos los archivos de esta carpeta utilizando el método GetFiles de la clase Directory (del espacio de nombres System.IO).

El siguiente ejemplo de código muestra cómo obtener una lista de todos los archivos en la carpeta:

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

Cuando se recopilan todos los archivos, el resto del trabajo se realiza mediante el método DetectFileFormat, que verifica el formato del archivo.

El siguiente ejemplo de código muestra cómo iterar sobre la lista recopilada de archivos, verificar el formato de cada archivo y mover cada archivo a la carpeta correspondiente:

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

Los archivos se mueven a las subcarpetas apropiadas utilizando el método Move de la clase File, desde el mismo espacio de nombres System.IO.

Los siguientes archivos se utilizan en el ejemplo anterior. El nombre del archivo está a la izquierda y su descripción a la derecha:

Grupo de Archivos Documento de Entrada Tipo
Formatos de archivo admitidos Test File (Doc).doc Microsoft Word 95/6.0 o Microsoft Word 97 – documento de 2003.
Test File (Dot).dot Plantilla Microsoft Word 95 / 6.0 o Microsoft Word 97 – 2003.
Test File (Docx).docx Office Abre XML WordprocessingML documento sin macros.
Test File (Docm).docm Office Abre XML WordprocessingML documento con macros.
Test File (Dotx).dotx Plantilla de oficina abierta XML WordprocessingML.
Test File (Dotm).dotm Plantilla Office Open XML WordprocessingML con macros.
Test File (XML).xml FlatOPC OOXML Documento.
Test File (RTF).rtf Documento de Formato de Texto Enriquecido.
Test File (WordML).xml Microsoft Word documento de 2003 WordprocessingML.
Test File (HTML).html HTML documento.
Test File (MHTML).mhtml Documento MHTML (Archivo web).
Test File (Odt).odt OpenDocument Texto (OpenOffice Escritor).
Test File (Ott).ott Plantilla de documento OpenDocument.
Test File (DocPreWord60).doc Microsoft Word 2.0 documento.
Documentos cifrados Test File (Enc).doc Documento cifrado Microsoft Word 95 / 6.0 o Microsoft Word 97 – 2003.
Test File (Enc).docx Documento Office Open XML WordprocessingML cifrado.
Formatos de archivo no compatibles Test File (JPG).jpg JPEG archivo de imagen.