Java通过InputStream判断word格式

Java通过InputStream判断word格式

    • [1. 传入inputStream文件流](#1. 传入inputStream文件流)
    • [2. 读取文件流前八个字节到字节流数组中](#2. 读取文件流前八个字节到字节流数组中)
    • [3. 转为字符串](#3. 转为字符串)
    • [4. 对比字符串判断文件类型](#4. 对比字符串判断文件类型)
    • [5. 完整代码](#5. 完整代码)

Java通过InputStream判断word格式)

1. 传入inputStream文件流

2. 读取文件流前八个字节到字节流数组中

java 复制代码
byte[] byteArray = new byte[8];
inputStream.read(byteArray, 0, 8);

3. 转为字符串

java 复制代码
StringBuilder sb = new StringBuilder();
for (byte b : byteArray) {
    sb.append(String.format("%02X", b));
}

4. 对比字符串判断文件类型

java 复制代码
if (hexString.startsWith("D0CF11E0A1B11AE1")) {
    return "doc";
} else if (hexString.startsWith("504B030414000600")) {
    return "docx";
} else {
    return "unknown";
}

5. 完整代码

java 复制代码
/**
     * 通过流判断word格式
     * @param inputStream
     * @return
     * @throws IOException
     */
    public static String detectFileType(InputStream inputStream) throws IOException {
    byte[] byteArray = new byte[8];
    try{
        inputStream.read(byteArray, 0, 8);
        String hexString = bytesToHexString(byteArray);
        if (hexString.startsWith("D0CF11E0A1B11AE1")) {
            return "doc";
        } else if (hexString.startsWith("504B030414000600")) {
            return "docx";
        } else {
            return "unknown";
        }
    } finally {
        if (inputStream !=null) {
            inputStream.close();
        }
    }
}

private static String bytesToHexString(byte[] byteArray) {
    StringBuilder sb = new StringBuilder();
    for (byte b : byteArray) {
        sb.append(String.format("%02X", b));
    }
    return sb.toString();
}
相关推荐
慧一居士1 小时前
ThreadLocal 功能及使用场景介绍,使用详解
java
zh73141 小时前
typephp的编译核心phpx原理解析
android·java·开发语言
2401_894915533 小时前
GEO 优化源码全解析:从搜索引擎到 AI 引擎的底层改写逻辑
java·服务器·前端·数据库·人工智能·分布式·搜索引擎
Java牛马7 小时前
SpringBoot Starter 依赖相关总结
java·spring·springboot·starter·自动装配·依赖
吴声子夜歌7 小时前
Java面试——Spring Cloud原理及应用(二)
java·spring cloud·面试
rockey6277 小时前
C#脚本引擎之AScript与Jurassic、Jint对比
javascript·c#·.net·js·script·动态脚本
SomeB1oody8 小时前
【RustyML入门】6.3. 并行归约
开发语言·后端·机器学习·rust·教程
东小西8 小时前
【SAA实战】第 1 篇:ReactAgent 入门——先撸个"会调工具的助手"跑起来
java·人工智能·spring
Profile排查笔记8 小时前
指纹浏览器哪个好?从 Profile、代理、权限和自动化能力判断是否适合
前端·人工智能·后端·自动化
用户938515635079 小时前
用 AI 结对编程从 0 搭一个"单词后台管理系统":Next.js + Supabase + Drizzle + shadcn/ui 全记录
后端·postgresql·next.js