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();
}
相关推荐
菠菠萝宝13 小时前
【Java手搓RAGFlow】-3- 用户认证与权限管理
java·开发语言·人工智能·llm·openai·qwen·rag
csdn_wuwt15 小时前
前后端中Dto是什么意思?
开发语言·网络·后端·安全·前端框架·开发
print(未来)15 小时前
C++ 与 C# 的性能比较:选择合适的语言进行高效开发
java·开发语言
JosieBook15 小时前
【Rust】 基于Rust 从零构建一个本地 RSS 阅读器
开发语言·后端·rust
王者之座17 小时前
java+maven配置yguard的一次实验
java·spring boot·maven
努力的小郑19 小时前
今晚Cloudflare一哆嗦,我的加班计划全泡汤
前端·后端·程序员
百***618719 小时前
springboot整合mybatis-plus(保姆教学) 及搭建项目
spring boot·后端·mybatis
q***615019 小时前
eclipse配置Spring
java·spring·eclipse
Miraitowa_cheems19 小时前
LeetCode算法日记 - Day 106: 两个字符串的最小ASCII删除和
java·数据结构·算法·leetcode·深度优先