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();
}
相关推荐
麻瓜code24 分钟前
【LeetCode】两数相加:模拟加法竖式,用进位 flag 一次遍历解决
java
zzzll11111 小时前
Spring Boot 实现数据脱敏:自定义注解 + Jackson 序列化器
java·spring boot·后端
戌中横1 小时前
数据持久化——PlayerPrefs
c#·数据持久化
vx-Biye_Design6 小时前
SSM伴侣动物伴护星小程序06330-计算机课程设计、毕业设计
spring boot·后端·elasticsearch·小程序·架构·课程设计·idea
2分钟速写快排8 小时前
什么是 RAG?如何用 RAG 实现一个用户记忆?
前端·后端·ai编程
面向Google编程8 小时前
Apache Iceberg Variant 类型:v3 半结构化数据不再「二选一」
大数据·后端
lhldsg8 小时前
全民健身解决方案小程序开发:从0到1的技术实战
java·数据库·需求分析
jason成都8 小时前
Spring WebFlux 适配达梦新方案|dm‑r2dbc:Netty 异步传输的实验性 R2DBC 驱动
java·后端·spring
泡海椒8 小时前
内置SPI函数库详解:JQuick-Java Builtin工具类实战用法
java·开发语言·python
辰烨chenye9 小时前
LeetCode Hot 100 题解 · 二分篇
java·算法·leetcode