我如何知道Java中Word文档的确切扩展

时间:2013-09-11 06:31:16

标签: java file-io ms-word java-io

我有一个复制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是一个没有任何扩展名的原始文件(例如'sample-file'),我无法更改。来源src可以是'doc'或'docx'类型 现在,作为输出,我需要将dst的内容复制到具有src格式的Word文档(这里“正确格式”很重要,否则文档将变得无用)。由于dst没有任何扩展名,我只能通过查看名称找不到文件格式。有没有办法,我可以从文件内容中检索文件扩展名?希望Word文档必须包含一些包含此信息的元数据。

2 个答案:

答案 0 :(得分:2)

http://www.forensicswiki.org/wiki/Word_Document_%28DOC%29 此链接详细介绍了许多不同的文件类型。它描述了DOC和DOCX文件的标题,因此您应该能够解析文件并确定它们的类型。

查看链接,.doc文件是OLE化合物文件,该文件应具有以下二进制头:

d0 cf 11 e0 a1 b1 1a e1

相反,.docx文件将具有二进制签名:

50 4b

此外,DOCX文件采用ZIP格式,前两个字节是字母PK(在ZIP的创建者Phil Katz之后)。

希望这有帮助!

答案 1 :(得分:1)

如果您以二进制格式阅读DOCX个文件内容,前两个字符将为“PK”。您可以使用相同的方法来识别它是否为DOCX文件。