我有一个程序可以复制word文件(docx/doc),如下所示:
首先将 doc/docx 源文件复制到临时原始文件,其中扩展名丢失。现在,该临时原始文件的内容将被复制到具有合适扩展名的文件(doc/docx)。由于此时对原始文件一无所知,因此此处需要从源 Word 文档的内容中导出其扩展名。
InputStream in = new FileInputStream ( src );
OutputStream out = new FileOutputStream ( dst );
byte [] buf = new byte [1024];
int len;
while ( ( len = in.read ( buf ) ) > 0 ) {
out.write ( buf, 0, len );
}
目的地 dst
是一个没有任何扩展名的原始文件(例如“样本文件”),我无法更改。来源src
可能是“doc”或“docx”类型。
现在,作为输出,我需要复制 dst
的内容到 src
起具有正确格式的 Word 文档(这种“正确的格式”在这里很重要,否则该文档将变得毫无用处)。自 dst
没有任何扩展名,仅通过名称无法找到文件格式。有没有办法从文件内容中检索文件扩展名?希望 Word 文档必须有一些包含此信息的元数据。
最佳答案
http://www.forensicswiki.org/wiki/Word_Document_%28DOC%29 此链接详细介绍了许多不同的文件类型。它描述了 DOC 和 DOCX 文件的 header ,因此您应该能够解析文件并确定它们是什么类型。
查看链接,.doc 文件是 OLE 复合文件,该文件应具有以下二进制 header :
d0 cf 11 e0 a1 b1 1a e1
相比之下,.docx 文件将具有二进制签名:
50 4b
此外,DOCX 文件采用 ZIP 格式,其中前两个字节是字母 PK(以 ZIP 的创建者 Phil Katz 的名字命名)。
希望这有帮助!
关于java - 我如何知道Java中Word文档的确切扩展名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18734147/