在Android中验证和读取Word文件

时间:2012-05-11 09:07:20

标签: android ms-word

我希望能够访问用户手机的SD卡中的word文件,并且该文件将由用户选择。我希望能够处理文件,即读取其内容并根据用户的意愿进行修改,并在用户点击“保存”时保存。

在Android中有可能吗?如何让程序理解该文件是Word文件?

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

6 个答案:

答案 0 :(得分:2)

最简单的方法IMHO是将Apache POI库移植到Android。有可能并且proof那个

移植POI您可以将Word编辑功能嵌入到您的应用程序中。

一段代码如:

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

简单地说,Word文件将由其他应用程序编辑 - 而不是您的。据我所知,这并不是你想要的。

答案 1 :(得分:1)

所以,正如我在上面写的那样。检查它的单词文件(.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);  

答案 2 :(得分:1)

我不确定但我明白的是,你想要的是能够确定文件是word文档而不是简单地查看扩展名。

我认为word文档有文件签名(见link

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

d0 cf 11 e0 a1 b1 1a e1

因此,检查相应的字节应该说明它是否是word文档。小心,我不确定二进制文件是否特定于word,doc或docx,或者是否适用于所有的microsoft office:powerpoint,excel,word。

您应该在网上搜索“microsoft word document file signature”。这肯定会为您提供所需的信息。

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

答案 3 :(得分:1)

读取和写入Word文档

Apache POI移植到Android很可能是具有工时约束的项目的唯一现实解决方案。它已由其他人完成,网上有一些信息可以提供。以下博客有一个Excel示例,您可以将其作为Word解决方案的起点:

Android read write excel file using Apache POI

<强>验证

虽然Apache POI很可能是您的最佳选择,但它打开的某些文档无法在MS Word中打开,因此无效的MS Word文档。

Word格式的结构非常复杂。它不仅仅是带有标签的文本流。它是一种专有格式,如果不访问格式结构,就无法完全准确地验证Word文件。

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

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

答案 4 :(得分:1)

您的问题需要更多澄清

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

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

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

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

    <强>验证

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

    完美的解决方案是检查MS-DOC format。这是一个非常重要的要求。对于这样一个有限的应用程序,我想如果你搜索网络,你将找不到任何东西。因此,您必须实现一个遵循此格式的阅读器。

答案 5 :(得分:0)

如果要直接编辑数据,只需对可用的文本编辑器执行意图。

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