java如何实现判断文件的真实类型

Java如何实现判断文件真实类型的攻略如下:

1.使用后缀名判断文件类型

Java可以通过文件后缀名来判断文件类型。例如,如果文件名以".txt"结尾,则是文本文件。这种方法适用于大多数文件类型,但不适用于所有文件。以下是示例代码:

import java.io.File;

public class FileTypeChecker {
    public static String getFileTypeBySuffix(String filePath) {
        String type = "";
        String fileName = new File(filePath).getName();
        if (fileName.indexOf(".") != -1) {
            String suffix = fileName.substring(fileName.lastIndexOf(".") + 1);
            if ("txt".equalsIgnoreCase(suffix)) {
                type = "text/plain";
            } else if ("html".equalsIgnoreCase(suffix)) {
                type = "text/html";
            } else if (suffix.equalsIgnoreCase("gif") || suffix.equalsIgnoreCase("jpg") || suffix.equalsIgnoreCase("jpeg") || suffix.equalsIgnoreCase("png")) {
                type = "image/" + suffix;
            } else if (suffix.equalsIgnoreCase("pdf")) {
                type = "application/pdf";
            } else if (suffix.equalsIgnoreCase("doc") || suffix.equalsIgnoreCase("docx")) {
                type = "application/msword";
            } else if (suffix.equalsIgnoreCase("xls") || suffix.equalsIgnoreCase("xlsx")) {
                type = "application/vnd.ms-excel";
            } else if (suffix.equalsIgnoreCase("ppt") || suffix.equalsIgnoreCase("pptx")) {
                type = "application/vnd.ms-powerpoint";
            } else if (suffix.equalsIgnoreCase("zip") || suffix.equalsIgnoreCase("rar")) {
                type = "application/zip";
            }
        }
        return type;
    }
}

以上代码中自动识别文件后缀名并返回相应类型的MIME类型(多功能Internet邮件扩展类型)。

2.使用魔数(magic number)判断文件类型

文件类型通常包含文件头(header)或规范(specification),可以通过魔数来识别。魔数是文件起始的一些特定字节,用于标识文件类型。我们可以读取文件的前几个字节来判断文件类型。以下是示例代码:

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

public class FileTypeChecker {
    public static String getFileTypeByMagic(String filePath) throws IOException {
        String type = "";
        InputStream is = new FileInputStream(filePath);
        byte[] head = new byte[10];
        is.read(head);
        String fileHeader = bytesToHexString(head);
        switch (fileHeader) {
            case "89504e47":
                type = "image/png";
                break;
            case "47494638":
                type = "image/gif";
                break;
            case "ffd8ffe0":
            case "ffd8ffe1":
            case "ffd8ffe2":
                type = "image/jpeg";
                break;
            case "25504446":
                type = "application/pdf";
                break;
            case "504b34":
                type = "application/zip";
                break;
            default:
                type = "unknown";
        }
        return type;
    }

    private static String bytesToHexString(byte[] bytes) {
        StringBuilder hexString = new StringBuilder();
        for (byte b : bytes) {
            int hex = b & 0xFF;
            if (hex < 16) {
                hexString.append("0");
            }
            hexString.append(Integer.toHexString(hex));
        }
        return hexString.toString();
    }
}

以上代码中直接读取文件的前10个字节,并根据字节的值所对应的16进制数字来检查文件头。根据文件头的值确定文件类型。

这两种方法都可以识别文件的类型。但是,只使用文件后缀名来判断文件类型可能不够准确,因为文件名可以任意更改。使用魔数判断文件类型更加准确,因为它只是读取文件的前几个字节来确定文件类型。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java如何实现判断文件的真实类型 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • SpringBoot配置使用H2数据库的简单教程

    下面是关于”SpringBoot配置使用H2数据库的简单教程”的完整攻略,包含有两条示例: 目录 环境要求 新建SpringBoot项目 配置H2数据库 使用H2数据库 方法一:使用浏览器访问H2数据库 方法二:使用SQL客户端访问H2数据库 环境要求 Java 8 Maven 3 SpringBoot 新建SpringBoot项目 首先我们需要新建一个Sp…

    Java 2023年6月1日
    00
  • Java Lambda 表达式详解及示例代码

    Java Lambda 表达式详解及示例代码 1. 什么是 Lambda 表达式 Lambda 表达式是 Java 8 中引入的一个新特性,它可以用更简洁的方式来表示某些接口或抽象类的实现。 Lambda 表达式可以看做是匿名函数,它由三个部分组成:参数列表、箭头符号和函数体。它的基本语法如下: (parameter1, parameter2, …) -…

    Java 2023年5月26日
    00
  • 基于Jquery实现表格动态分页实现代码

    下面是关于“基于Jquery实现表格动态分页实现代码”的完整攻略: 1. 准备工作 在实现表格动态分页之前,需要准备以下工作: HTML页面:需要有数据展示的表格和分页控件的布局; Jquery库:要使用Jquery库,可以从官网下载或者引入CDN; 2. 实现步骤 2.1 准备数据 首先需要有数据源,这里以JSON数据为例,数据格式如下: { "…

    Java 2023年6月16日
    00
  • 详解Java使用JMH进行基准性能测试

    详解Java使用JMH进行基准性能测试 性能测试对于Java应用程序的开发和优化是至关重要的。在Java中,可以使用JMH框架进行严密的基准测试,以确保在实际生产环境中获得最高的性能和最小的延迟。 介绍JMH框架 JMH是一个专业级的基准测试框架,它可以提供准确的基准测试结果。它提供了多种的方式来测试不同的Java代码片段,包括方法调用、对象实例化、算法等。…

    Java 2023年5月26日
    00
  • echarts整合多个类似option的方法实例

    下面我将为您详细讲解“echarts整合多个类似option的方法实例”的完整攻略,主要分为以下几步进行。 1. 确认需求 在开始实现之前,我们首先需要确认我们的需求是什么。假设我们需要实现一个折线图,我们希望可以通过选择不同的时间段,动态的显示不同的数据,例如按天、按周、按月等显示数据。 2. 构建数据 为了实现我们的需求,我们需要构建一个数据对象,来保存…

    Java 2023年6月15日
    00
  • java中Scanner输入用法实例

    Java中Scanner输入用法实例 Scanner类介绍 Scanner类是Java.util中的一个类,用于接收用户从键盘输入的数据,将输入的数据转换为相应的数据类型。 Scanner使用方法 导包 Scanner所在的包是java.util,所以用到Scanner时要导入该包。 import java.util.Scanner; 创建Scanner对象…

    Java 2023年5月26日
    00
  • Java获取指定字符串出现次数的方法

    Java获取指定字符串出现次数的方法 基本思路 要想获取指定字符串出现的次数,基本思路是使用String类中的方法来处理字符串,并利用循环的方式对整个字符串进行遍历,统计指定字符串出现的次数。 示例一 以下是一个基本的Java代码段,可以用于计算一个字符串中指定的子串出现的次数: public static int countOccurrences(Stri…

    Java 2023年5月27日
    00
  • 全面解析JTA 深度历险

    全面解析JTA 深度历险攻略 前言 JTA(Java Transaction API)是Java EE平台中用于处理分布式事务的标准API。本攻略旨在深度解析JTA的基本概念、API和应用场景,让读者能够深入理解JTA并能够在实际开发中应用JTA处理分布式事务。 JTA基础概念 事务 事务是指一系列数据库操作的逻辑单元,通常是由一份或多份数据库操作组成的序列…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部