我遇到的情况是我从网络服务接收一个ms-word(docx)文档作为流/ bytearray。
然后我尝试重新创建该文件,使其具有与以前相同的名称和内容。
如果我比较原始文件和下载后创建的文件,那么它们是相同的。
然而,当我尝试在单词中打开新单词时,我收到错误,如果接受riscs,我可以打开它。
如果我查看windows中文件的属性,那么新文件会丢失很多信息。
任何人都知道如何重新创建属性,以便可以无误地打开文件吗?
只是一条额外的信息..如果我使用.doc(word97-2003)文件一切正常,只有.docx文件是一个问题(也.xlsx和所有办公室2007-2010文件)。
这是我创建文件的代码..
private static void saveBytesAsFile(String path, String filename, byte[] data){
try {
File dir = new File(path);
dir.mkdirs();
OutputStream os = new FileOutputStream(path + "/" + filename);
os.write(data);
os.flush();
os.close();
} catch (FileNotFoundException fnfe) {
fnfe.printStackTrace();
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
我在notepad ++中比较了原始文件和重新创建的文件,得到的结果是相同的。
这就是我看到一些属性丢失的原因。
这些是我从单词中得到的警告:
如果我按第一个确定,第二个是,我可以打开文件。
答案 0 :(得分:0)
如果要求您“接受风险”,那么这听起来更像是从互联网下载文档时的默认Word行为,而不是错误。您可以从Word选项,信任中心更改Word行为(假设您使用的是Word 2007或更高版本)。
所以我怀疑缺少的属性是个问题。通过在构建新文档之前更改系统时钟(基于先前文档的内容),可以更改要重新创建的文档的创建日期。我不推荐这些步骤。
答案 1 :(得分:0)
事实证明,这些属性没有问题。
简单地说,在提供文档数据的服务中的某个地方,在文件数据的末尾添加了一个额外的空白字符。
这导致预期文件长度与实际文件长度不匹配,因此办公室组件在尝试打开文档时抱怨。
这也阻止了文件的属性被解析。
令人讨厌的是,文件比较工具没有抓住这个。 (或者可能需要对尾随空格进行一些配置而不被忽略。)