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

标签 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是一个没有任何扩展名的原始文件(例如“样本文件”),我无法更改。来源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/

相关文章:

java - 为什么不能声明抛出异常类?

java - Maven 中的 Springframework-core 更新导致我超时

java - 如何使用java应用程序打印word和excel文档?

c# - 如何将 C# 中的两个 docx word 文件与动态汇编进行比较?

java - 在 javafx 中双向绑定(bind) ToggleGroup

java - 具有单一源代码树的纯 Java 和 Android 的 Gradle 项目

java - 如何使用 BufferedWriter 和 FileOutPutStream 将数据附加到文件

matlab - 在 MATLAB 中使用 textscan() 时忽略“字符

c - 带文件IO的链表

vba - 字 VBA : Table cell range to text file