在Android中validation并阅读Word文件

我希望能够访问用户电话的SD卡中的文字文件,并由用户select文件。 我希望能够处理文件,即读取其内容并根据用户的需要进行修改,并在用户单击“保存”时进行保存。

Android可能吗? 我怎样才能使程序明白,该文件是一个Word文件?

请注意,我不想查看Word文件。 用户将selectWord文件,我的应用程序应该能够对其进行一些更改并保存。

Solutions Collecting From Web of "在Android中validation并阅读Word文件"

恕我直言,最简单的方法是将Apache POI库移植到Android。 这是可能的和有证据的

移植POI,您可以将Word编辑functionembedded到应用程序中。

一段代码就像:

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

简单的说,Word文件将被其他应用程序编辑 – 不是你的。 据我了解,这不完全是你想要的。

所以,正如我上面写的。 检查它是否是文件(.doc)最简单的方法是获取它的绝对path,并用path.endsWith(".doc");检查它path.endsWith(".doc");

Android没有默认应用程序来查看.doc文件,但是如果用户安装了这样的应用程序(即Polaris Office),您可以通过以下方式查看它:

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

我不知道,但我所知道的是,你想要的是能够确保一个文件是一个文件,而不只是看扩展名。

我认为word文档有一个文件签名(参见这个链接 )

在这种情况下,文件签名是一个OLE复合文件格式,在标题位置中具有以下二进制文件

d0 cf 11 e0 a1 b1 1a e1

所以检查相应的字节应该说,如果它是一个单词文件或不。 请注意,我不确定二进制文件是否适用于word,doc或docx,或者是否适用于所有微软办公软件:powerpoint,excel,word。

你也许应该在网上search“微软文档文件签名”。 这肯定会给你你正在寻找的信息。

现在,如何“编辑”这是另一个问题。

读取和写入Word文档

将Apache POI移植到Android很可能是工时约束项目唯一可行的解​​决scheme。 这是由其他人完成的,网上有一些如何做到这一点的信息。 以下博客有一个Excel示例,您可以将其作为Word解决scheme的起点:

Android读取使用Apache POI写入excel文件

validation

虽然Apache POI很可能是您最好的select,但是它打开的某些文档将无法在MS Word中打开,因此也不是有效的MS Word文档。

Word格式的结构相当复杂。 这不仅仅是一个带有标签的文本stream。 这是一种专有格式,无法以完全准确的方式validationWord文件,而无法访问格式结构。

最后,Word文档的唯一100%准确的validation是在MS Word中打开的。 与Microsoft Word MVP的Jay Freedman的讨论提供了关于validation问题的一些观点以及对Word格式结构的一些了解。

净,如果你使用Apache POI,你会有一些误报,这取决于你的客户的要求,这是否可以接受。

你的问题需要更多的澄清

无论如何,这是你应该做的编辑文件

  1. 阅读文件

     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. 编辑内容

     content.append("bla bla"); content.append("kaza maza"); 
  3. 保存文件

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

请记住添加到您的清单写入到SD卡的权限:

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

validation

不幸的是,这是最难的部分。 Apache POI是一个select; 然而,这是一个大型图书馆,不能保证正确的行为。

完美的解决scheme是检查MS-DOC格式 。 这是一个非常重要的要求。 对于这样一个有限的应用程序,我想你不会find任何东西,如果你searchnetworking。 因此,你将不得不实现遵守这种格式的读者。

如果您想要直接编辑数据,只需执行一个可用的文本编辑器。

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