我有一个复制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文档必须包含一些包含此信息的元数据。
答案 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
文件。