Validación y lectura de un archivo Word en Android

Quiero poder tener acceso a un archivo de la palabra en el sdcard del teléfono del usuario, y el archivo será elegido por el usuario. Quiero ser capaz de procesar el archivo, es decir, leer su contenido y modificarlo como el usuario desea, y guardarlo cuando el usuario hace clic en "guardar".

¿Es posible en Android? ¿Cómo puedo hacer que el programa entienda que el archivo es un archivo de Word?

Tenga en cuenta que no quiero ver el archivo de Word. El usuario seleccionará el archivo de Word y mi aplicación debería poder hacer algunos cambios en él y guardarlo.

La manera más simple de IMHO es portar la biblioteca de POI Apache a Android. Es posible y hay pruebas de que

Al introducir POI puede integrar la función de edición de Word en su aplicación.

Pieza de código como:

 Intent intent = new Intent(Intent.ACTION_EDIT); Uri uri = Uri.parse("file:///"+file.getAbsolutePath()); intent.setDataAndType(uri, "plain/text"); startActivity(intent); 

Simplemente significa que el archivo de Word será editado por alguna otra aplicación – no la tuya. Por lo que yo entiendo, no es exactamente lo que quieres.

Así, como escribo arriba. La forma más sencilla de comprobar si es archivo de palabras (.doc) es obtener su ruta absoluta y comprobarlo con path.endsWith(".doc");

Android no tiene una aplicación predeterminada para ver los archivos .doc, pero si el usuario ha instalado dicha aplicación (es decir, Polaris Office), puede verla de esta manera:

 //Uri uri = Uri.parse("file://"+file.getAbsolutePath()); Intent intent = new Intent(); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setAction(Intent.ACTION_VIEW); String type = "application/msword"; intent.setDataAndType(Uri.fromFile(file), type); startActivity(intent); 

No estoy seguro, pero lo que entiendo es que lo que quieres es poder estar seguro de que un archivo es un documento de palabra sin simplemente mirar la extensión.

Creo que los documentos de palabra tienen una firma de archivo (vea este enlace )

La firma del archivo es en ese caso un formato de archivo compuesto OLE que tiene el siguiente valor binario en la posición del encabezado

D0 cf 11 e0 a1 b1 1a e1

Por lo tanto, comprobar los bytes correspondientes debe decir si es un documento de palabra o no. Tenga cuidado, no estoy seguro de si el binario es específico para palabra, doc o docx o disponible para todos los microsoft office: powerpoint, excel, word.

Usted debe quizás buscar en la web para "microsoft word document file signature". Esto sin duda le dará la información que está buscando.

Ahora, cómo "editar" es otra cuestión.

Leer y escribir en un documento de Word

El portar POI de Apache a Android es probablemente la única solución realista para un proyecto con restricciones hora-hombre. Ha sido hecho por otros y hay cierta información disponible en la web como hacerlo. El siguiente blog tiene un ejemplo para Excel, que puede tomar como punto de partida para una solución de Word:

Android lee el archivo excel de la escritura usando POI de Apache

Validación

Mientras que Apache POI es probablemente su mejor opción, algunos de los documentos que abre no será posible abrir en MS Word, y por lo tanto no son documentos válidos de MS Word.

La estructura del formato Word es bastante compleja. No es simplemente una corriente de texto con etiquetas. Es un formato propietario, y es imposible validar un archivo de Word con total exactitud sin acceso a la estructura de formato.

Al final, el único 100% de validación exacta de un documento de Word es si se abre en MS Word. Esta conversación con Jay Freedman, MVP de Microsoft Word, proporciona una cierta perspectiva sobre la pregunta de validación y algunas ideas sobre la estructura del formato de Word.

Net, si utiliza Apache POI, tendrá algunos positivos falsos y depende de los requisitos de su cliente si esto es aceptable o no.

Su pregunta necesita más clarificación

De todos modos esto es lo que debe hacer para editar el archivo

  1. Leer el archivo

     File sdcard = Environment.getExternalStorageDirectory(); File file = new File(sdcard,"theFILE"); StringBuilder content = new StringBuilder(); try { BufferedReader br = new BufferedReader(new FileReader(file)); String line; while ((line = br.readLine()) != null) { content.append(line); content.append('\n'); } } catch (IOException e) { } 
  2. Editar el contenido

     content.append("bla bla"); content.append("kaza maza"); 
  3. Guarda el archivo

     FileOutputStream f = new FileOutputStream(file); f.write(content.toString().toCharArray()); 

Recuerde agregar a su manifiesto los permisos para escribir en la tarjeta sd:

 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

Validación

Desafortunadamente esta es la parte más difícil. Apache POI es una opción; Sin embargo es una gran biblioteca que no garantiza el comportamiento correcto.

La solución perfecta es comprobar el formato MS-DOC . Es un requisito realmente grande. Para una aplicación tan limitada, supongo que no encontrará nada si busca en la web. Por lo tanto, tendrá que implementar un lector que respeta este formato.

Si desea editar los datos directamente, sólo haga una intención a un editor de texto disponible.

 Intent intent = new Intent(Intent.ACTION_EDIT); Uri uri = Uri.parse("file:///"+file.getAbsolutePath()); intent.setDataAndType(uri, "plain/text"); startActivity(intent); 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.