文件头部两个字节判断文件类型

技术文档网 2021-04-25

对于文件类型的判断有很多种,简单的方式靠后缀,推荐一种可靠的方式,通过文件头部两个字节判断文件真实类型,方法如下参考1

  public static String fileType(File file) {
    //文件类型
    String fileType = "";
    try {
        FileInputStream inputStream = new FileInputStream(file);
        byte[] buffer = new byte[2];
        //文件类型代码
        String filecode = "";
        //通过读取出来的前两个字节来判断文件类型
        if (inputStream.read(buffer) != -1) {
            for (int i = 0; i < buffer.length; i++) {
                //获取每个字节与0xFF进行与运算来获取高位,这个读取出来的数据不是出现负数,转换成字符串
                filecode += Integer.toString((buffer[i] & 0xFF));
            }
            // 把字符串再转换成Integer进行类型判断
            switch (Integer.parseInt(filecode)) {
                case 7790:
                    fileType = "exe";
                    break;
                case 7784:
                    fileType = "midi";
                    break;
                case 8297:
                    fileType = "rar";
                    break;
                case 8075:
                    fileType = "zip";
                    break;
                case 255216:
                    fileType = "jpg";
                    break;
                case 7173:
                    fileType = "gif";
                    break;
                case 6677:
                    fileType = "bmp";
                    break;
                case 13780:
                    fileType = "png";
                    break;
                default:
                    fileType = "unknown";
                    break;
            }
        }
    } catch (IOException e) {
        e.printStackTrace();
    } catch (Exception e) {
        e.printStackTrace();
    }
    return fileType;
}

相关文章

  1. 硅谷互联网公司的开发流程

    开发流程包括这么几个阶段: OKR 的设立; 主项目及其子项目的确立; 每个子项目的生命周期; 主项目的生命周期; 收尾、维护、复盘。 第一点,OKR 的设立 所有项目的起始,都应该从 Ro

  2. RESTful-表述性状态转移风格

    REST英文全拼:Representational State Transfer 面向资源编程 资源指的就是一类数据 产品表-&gt;就是产品资源 最重要的是如何表示一个资源 地址即

  3. 稳定性思考

    产品功能线 0-1: 当系统从无到有的时候,首要考虑的是研发效率,功能快速迭代,满足快速增长的业务需求 1-10 系统已经搭建起来,此时考虑的是系统的稳定性。 可用性:1.隔离:区分出核心和非核心功能

  4. Supervisor守护队列发邮件

    安装 CentOS: yum -y install supervisor Debien/Ubuntu适用:apt-get install supervisor 配置 修改主配置文件:vim /et

  5. 安装libsodium,让服务器支持chacha20等加密方式

    用chacha20加密方式需要安装libsodium 注意:libsodium从1.0.15开始就废弃了aes-128-ctr yum install wget m2crypto git libsod

随机推荐

  1. 硅谷互联网公司的开发流程

    开发流程包括这么几个阶段: OKR 的设立; 主项目及其子项目的确立; 每个子项目的生命周期; 主项目的生命周期; 收尾、维护、复盘。 第一点,OKR 的设立 所有项目的起始,都应该从 Ro

  2. RESTful-表述性状态转移风格

    REST英文全拼:Representational State Transfer 面向资源编程 资源指的就是一类数据 产品表-&gt;就是产品资源 最重要的是如何表示一个资源 地址即

  3. 稳定性思考

    产品功能线 0-1: 当系统从无到有的时候,首要考虑的是研发效率,功能快速迭代,满足快速增长的业务需求 1-10 系统已经搭建起来,此时考虑的是系统的稳定性。 可用性:1.隔离:区分出核心和非核心功能

  4. Supervisor守护队列发邮件

    安装 CentOS: yum -y install supervisor Debien/Ubuntu适用:apt-get install supervisor 配置 修改主配置文件:vim /et

  5. 安装libsodium,让服务器支持chacha20等加密方式

    用chacha20加密方式需要安装libsodium 注意:libsodium从1.0.15开始就废弃了aes-128-ctr yum install wget m2crypto git libsod