`

java判断文件头信息区分文件类型

阅读更多
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.util.Arrays;


/**
 * 
 * 文件类型校验 Spring3及以上 依赖Spring-core.jar和commons-io-xx.jar
 *
 */
public class FileValidateType {
	/**
	 * 文件头信息,十六进制信息,取前4位 
	 * 50 4b 03 04 office 2007+ 
	 * d0 cf 11 e0 office 97-03 
	 * 25 50 44 46 pdf
	 * ff d8 ff e0 jpg,部分png与jpg文件前4为一样 
	 * ff d8 ff e1 jpg,一种不同的jpg头文件	 www.2cto.con 
	 * 89 50 4e 47 png 
	 * 47 49 46 38 gif 
	 * 49 49 2A 00 tif 
	 * 42 4D bmp 
	 * 38 42 50 53 psd 
	 * 41 43 31 30 dwg 
	 * 252150532d41646f6265 ps 
	 * 0D0A0D0A txt
	 * 0D0A2D2D txt 
	 * 0D0AB4B4 txt 
	 * B4B4BDA8 txt,文件头部为汉字 
	 * 73646673 txt,文件头部为英文字母
	 * 32323232 txt,文件头部内容为数字 
	 * 0D0A09B4 txt,文件头部内容为数字 
	 * 3132330D txt,文件头部内容为数字
	 * 7B5C727466 rtf 日记本
	 * 
	 * //视频或音频类 
	 * 3026B275 wma 
	 * 57415645 wav 
	 * 41564920 avi 
	 * 4D546864 mid 
	 * 2E524D46 rm
	 * 000001BA mpg 
	 * 000001B3 mpg 
	 * 6D6F6F76 mov 
	 * 3026B2758E66CF11 asf
	 * 
	 * 压缩包 
	 * 52617221 rar 
	 * 1F8B08 gz
	 * 
	 * 程序文件 
	 * 3C3F786D6C xml 
	 * 68746D6C3E html 
	 * 7061636B java 
	 * 3C254020 jsp 
	 * 4D5A9000 exe
	 * 
	 * 
	 * 44656C69766572792D646174653A eml 
	 *  邮件 5374616E64617264204A mdb
	 * //Access数据库文件
	 * 
	 * 46726F6D mht 4D494D45 mhtml
	 */

	public static final String FILE_TYPE_OFFICE_97_03 = "d0cf11e0";
	public static final String FILE_TYPE_OFFICE_07 = "504b0304";
	public static final String FILE_TYPE_OFFICE_PDF = "25504446";
	public static final String FILE_TYPE_OFFICE_JPG1 = "ffd8ffe0";
	public static final String FILE_TYPE_OFFICE_JPG2 = "ffd8ffe1";

	public static boolean validataType(byte[] bt, String[] costomTypes) {
		String Types = Arrays.toString(costomTypes).substring(1,
				Arrays.toString(costomTypes).length() - 1);
		Types = Types.replaceAll(", ", " ");
		if (bt != null) {
			int size = bt.length;
			String hex = null;
			StringBuilder contentType = new StringBuilder();
			for (int i = 0; i < size; i++) {
				hex = Integer.toHexString(bt[i] & 0xFF);
				if (hex.length() == 1)
					hex = "0" + hex;
				contentType.append(hex);
				if (i > 2)
					break;
				if (Types.indexOf(contentType.toString()) > -1)
					return Boolean.TRUE;
			}
		}
		return Boolean.FALSE;
	}

	/*
	 * private static boolean validateType(String path,String[] costomTypes){
	 * boolean flag=false; try { flag =
	 * FileValidateType.validataType(FileUtils.readFileToByteArray
	 * (ResourceUtils.getFile("classpath:"+path)), costomTypes); } catch
	 * (IOException e) { e.printStackTrace(); } return flag; }
	 */
	/**
	 * 从输入流获取数据
	 * 
	 * @param inputStream
	 * @return
	 * @throws Exception
	 */
	public static byte[] readInputStream(InputStream inputStream)
			throws Exception {
		byte[] buffer = new byte[1024];
		int len = -1;
		ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
		while ((len = inputStream.read(buffer)) != -1) {
			outputStream.write(buffer, 0, len);
		}
		outputStream.close();
		return outputStream.toByteArray();
	}
}

 

分享到:
评论

相关推荐

    java通过文件头内容判断文件类型

    本篇文章将深入探讨如何在Java中通过文件头内容来判断文件类型。 首先,了解文件头的基本概念。文件头是指文件开始的一段字节,不同的文件格式会有不同的文件头结构。例如,JPEG图像文件的开头通常是"FF D8 FF E0...

    java 解析 tar gz文件 两种方法

    在Java中解析这种类型的文件,通常需要两个步骤:首先解压gzip,然后解包tar。这里我们将详细探讨两种不同的方法来实现这个过程。 方法一:使用Apache Commons Compress库 Apache Commons Compress库是Java社区...

    java文件上传demo

    `parseRequest`方法将表单数据转换为`FileItem`对象,然后我们可以通过判断`isFormField()`来区分普通字段和上传的文件。对于每个文件项,我们可以调用`write`方法将其保存到服务器指定的位置。 这个"java文件上传...

    java判断题题库.doc

    ### Java 判断题知识点解析 #### 第一章 Java 概述 1. **Java 语言具有良好的安全性与可移植性及平台无关性** 正确。Java 设计之初就考虑到了跨平台的需求,通过Java虚拟机(JVM)实现了“一次编写,到处运行”...

    JavaUser-Agent解析库

    JavaUser-Agent解析库是用于处理和解析HTTP请求头中的User-Agent字符串的工具,这对于Web开发、数据分析或爬虫程序来说非常关键。User-Agent字符串包含了访问网站的客户端信息,如浏览器类型、版本、操作系统等。在...

    java IP地址工具类,java IP地址获取,java获取客户端IP地址

    2. **获取客户端IP地址**:在Web应用中,服务器需要区分每个客户端,`IpUtils`可能会有方法处理`HttpServletRequest`对象,从HTTP请求头(如`X-Forwarded-For`或`RemoteAddr`)中解析出真实客户端的IP地址。...

    jsp文件下载源代码

    在设置`Content-Type`时,最好能够根据文件扩展名来自动判断文件类型,这样可以提高代码的健壮性。 ```java if (fileName.endsWith(".doc")) { response.setContentType("application/msword"); } else if ...

    JAVA程序员不可不注意的编码规范

    2. **返回值类型:** 如果方法的返回值类型为`Boolean`,那么推荐使用`is`或`has`前缀,以明确表示这是一个布尔类型的判断方法。例如,`getCurrentUser()`, `addUser()`, `hasAuthority()`。 #### 四、参数名...

    2013年最新java笔试题

    4. **重载多态**:在Java中,为了区分重载的同名方法,主要通过改变形式参数列表,即参数的个数、顺序或类型,而不是返回类型或方法名前的类名。 5. **数组定义**:在Java中,正确的数组定义方式是`int[] a = new ...

    Java贪吃蛇(关卡功能)

    【Java贪吃蛇游戏开发详解】 贪吃蛇是一款经典的电子游戏,其基本玩法是控制一个不断增长的蛇在有限的区域内移动,通过吃食物来延长自身长度,同时避免撞到自身或边界。在这个Java实现的贪吃蛇项目中,特别加入了...

    Java经典试题小集棉

    Java中的数组可以存储基本数据类型(如`int`、`char`等)或者对象类型(如`String`、`Integer`等)。 9. **Vector类中的对象不能是简单数据类型。** - 错误。`Vector`类可以存储任何类型的对象,包括基本数据类型...

    文件上传下载和验证码

    JavaScript库如jQuery或React可以用来处理用户选择的文件,提供进度反馈,以及验证文件类型和大小。 2. **表单提交**:传统方式是通过HTTP的POST请求发送文件,现代做法则常使用FormData对象,它可以封装文件和其他...

    java笔试题

    参数列表可以是参数个数不同,参数类型不同,但返回值类型不同不能作为重载区分的条件。 5. 数组定义:Java中定义数组的正确格式是先指定数组类型,后跟数组名和数组初始化。因此,选项B“inta=newint[10]”是正确...

    最全JAVA编写规范

    - **版权信息**:文件头部包含版权声明。 - **package/imports**:`package` 声明在前,`import` 按照字母顺序排列,优先标准库,避免过多的通配符导入(如 `java.io.*`)。 - **类注释**:解释类的功能和用途。 ...

    android Socket实现简单聊天功能以及文件传输

    在传输文件时,我们需要判断Socket接收的数据类型,因为文本聊天和文件传输的数据格式不同。通常,可以通过在数据包头部添加标识符来区分字符串和文件。例如,可以约定字符串消息以特定字符开始和结束,而文件传输则...

    JAVA源代码规范.doc

    - 文件头注释:包含版权信息、文件名称、文件版本、作者、创建日期等内容。 - 包声明:放在文件的第一行,紧跟在文件头注释之后。 - 导入语句:按逻辑分类分组并排序,如按标准库、第三方库和个人项目库顺序排列...

    Java程序设计习题

    - **解析**: 在Java中,强制类型转换是指将一个较长的数据类型转换为较短的数据类型的过程。 **10. 整数除法** - **知识点**: Java中的整数运算。 - **选项分析**: - A、`2` - B、`2.0` - C、`.50` - D、`2.5`...

    jsp中对文件的上传。。。

    在JavaServer Pages (JSP) 中,文件上传是一项常见的任务,尤其在开发Web应用程序时,例如用户需要上传图片、文档或其他类型的数据。JSP通过使用Servlet API和特定库,如Apache Commons FileUpload,可以实现这一...

    JAVA课期末考试复习题.pdf

    2. **Java标识符规则**:Java的标识符是区分大小写的,且不能以数字开头,可以包含字母、数字、下划线(_)和美元符号($)。选项A是合法的Java标识符,而B、C和D不是。 3. **Java类的根类**:所有的Java类都间接或直接...

Global site tag (gtag.js) - Google Analytics