我希望能够访问用户手机sdcard中的一个word文件,该文件将由用户选择。我希望能够处理该文件,即读取其内容并根据用户的意愿对其进行修改,并在用户单击“保存”时将其保存。</p>
在安卓中可以吗?如何让程序知道该文件是 Word 文件?
请注意,我不想查看 Word 文件。用户将选择 Word 文件,我的应用程序应该能够对其进行一些更改并保存它。
恕我直言,最简单的方法是将Apache POI库移植到 Android。这是可能的,并且有证据证明
移植 POI 您可以将 Word 编辑功能嵌入到您的应用程序中。
一段代码如:
Intent intent = new Intent(Intent.ACTION_EDIT);
Uri uri = Uri.parse("file:///"+file.getAbsolutePath());
intent.setDataAndType(uri, "plain/text");
startActivity(intent);
仅仅意味着 Word 文件将由其他一些应用程序编辑 - 而不是您的。据我了解,这并不完全是您想要的。
所以,正如我在上面写的。检查它是否是单词文件(.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 文档,而无需简单地查看扩展名。
我认为word文档有文件签名(见这个链接)
在这种情况下,文件签名是 OLE 复合文件格式,在标题位置具有以下二进制文件
d0 cf 11 e0 a1 b1 1a e1
所以检查相应的字节应该说它是否是一个word文档。请注意,我不确定二进制文件是否特定于 word、doc 或 docx,或者是否适用于所有 microsoft office:powerpoint、excel、word。
您或许应该在网上搜索“microsoft word 文档文件签名”。这肯定会为您提供您正在寻找的信息。
现在,如何“编辑”它是另一个问题。
读取和写入 Word 文档
将Apache POI移植到 Android 很可能是具有工时限制的项目的唯一现实解决方案。它已由其他人完成,并且在网络上有一些可用的信息如何做到这一点。以下博客有一个 Excel 示例,您可以将其作为 Word 解决方案的起点:
Android 使用 Apache POI 读写 excel 文件
验证
虽然 Apache POI 很可能是您的最佳选择,但它打开的某些文档将无法在 MS Word 中打开,因此不是有效的 MS Word 文档。
Word 格式的结构相当复杂。它不仅仅是带有标签的文本流。它是一种专有格式,如果不访问格式结构,就不可能完全准确地验证 Word 文件。
最后,对 Word 文档的唯一 100% 准确验证是它是否在 MS Word 中打开。与 Microsoft Word MVP Jay Freedman的讨论提供了有关验证问题的一些观点以及对 Word 格式结构的一些见解。
Net,如果您使用 Apache POI,您将有一些误报,这取决于您客户的要求是否可以接受。
您的问题需要进一步澄清
无论如何,这是你应该做的编辑文件
读取文件
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) {
}
编辑内容
content.append("bla bla");
content.append("kaza maza");
保存文件
FileOutputStream f = new FileOutputStream(file);
f.write(content.toString().toCharArray());
请记住将写入 sdcard 的权限添加到您的清单中:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
验证
不幸的是,这是最难的部分。Apache POI是一种选择;但是,它是一个大型库,不能保证正确的行为。
完美的解决方案是检查MS-DOC 格式。这是一个非常大的要求。对于这样一个有限的应用程序,我想如果您搜索网络,您将找不到任何东西。因此,您必须实现一个遵守这种格式的阅读器。
如果您想直接编辑数据,只需对可用的文本编辑器进行操作即可。
Intent intent = new Intent(Intent.ACTION_EDIT);
Uri uri = Uri.parse("file:///"+file.getAbsolutePath());
intent.setDataAndType(uri, "plain/text");
startActivity(intent);