这个方法只能在有限的范围内有效。并不是万金油

比如

图片类型判断,音频文件格式判断,视频文件格式判断等这种肯定是2进制且专业性很强的文件类型判断。

下面给出完整版代码

首先是文件类型枚取

package org.filetype;

/**
* 文件类型枚取
*/
public enum FileType { /**
* JEPG.
*/
JPEG("FFD8FF"), /**
* PNG.
*/
PNG("89504E47"), /**
* GIF.
*/
GIF("47494638"), /**
* TIFF.
*/
TIFF("49492A00"), /**
* Windows Bitmap.
*/
BMP("424D"), /**
* CAD.
*/
DWG("41433130"), /**
* Adobe Photoshop.
*/
PSD("38425053"), /**
* Rich Text Format.
*/
RTF("7B5C727466"), /**
* XML.
*/
XML("3C3F786D6C"), /**
* HTML.
*/
HTML("68746D6C3E"), /**
* Email [thorough only].
*/
EML("44656C69766572792D646174653A"), /**
* Outlook Express.
*/
DBX("CFAD12FEC5FD746F"), /**
* Outlook (pst).
*/
PST("2142444E"), /**
* MS Word/Excel.
*/
XLS_DOC("D0CF11E0"), /**
* MS Access.
*/
MDB("5374616E64617264204A"), /**
* WordPerfect.
*/
WPD("FF575043"), /**
* Postscript.
*/
EPS("252150532D41646F6265"), /**
* Adobe Acrobat.
*/
PDF("255044462D312E"), /**
* Quicken.
*/
QDF("AC9EBD8F"), /**
* Windows Password.
*/
PWL("E3828596"), /**
* ZIP Archive.
*/
ZIP("504B0304"), /**
* RAR Archive.
*/
RAR("52617221"), /**
* Wave.
*/
WAV("57415645"), /**
* AVI.
*/
AVI("41564920"), /**
* Real Audio.
*/
RAM("2E7261FD"), /**
* Real Media.
*/
RM("2E524D46"), /**
* MPEG (mpg).
*/
MPG("000001BA"), /**
* Quicktime.
*/
MOV("6D6F6F76"), /**
* Windows Media.
*/
ASF("3026B2758E66CF11"), /**
* MIDI.
*/
MID("4D546864"); private String value = ""; /**
* Constructor.
*
* @param type
*/
private FileType(String value) {
this.value = value;
} public String getValue() {
return value;
} public void setValue(String value) {
this.value = value;
}
}

  然后是类型判断核心类

package org.filetype;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream; /**
* 文件类型判断类
*/
public final class FileTypeJudge { /**
* Constructor
*/
private FileTypeJudge() {} /**
* 将文件头转换成16进制字符串
*
* @param 原生byte
* @return 16进制字符串
*/
private static String bytesToHexString(byte[] src){ StringBuilder stringBuilder = new StringBuilder();
if (src == null || src.length <= 0) {
return null;
}
for (int i = 0; i < src.length; i++) {
int v = src[i] & 0xFF;
String hv = Integer.toHexString(v);
if (hv.length() < 2) {
stringBuilder.append(0);
}
stringBuilder.append(hv);
}
return stringBuilder.toString();
} /**
* 得到文件头
*
* @param filePath 文件路径
* @return 文件头
* @throws IOException
*/
private static String getFileContent(String filePath) throws IOException { byte[] b = new byte[28]; InputStream inputStream = null; try {
inputStream = new FileInputStream(filePath);
inputStream.read(b, 0, 28);
} catch (IOException e) {
e.printStackTrace();
throw e;
} finally {
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
throw e;
}
}
}
return bytesToHexString(b);
} /**
* 判断文件类型
*
* @param filePath 文件路径
* @return 文件类型
*/
public static FileType getType(String filePath) throws IOException { String fileHead = getFileContent(filePath); if (fileHead == null || fileHead.length() == 0) {
return null;
} fileHead = fileHead.toUpperCase(); FileType[] fileTypes = FileType.values(); for (FileType type : fileTypes) {
if (fileHead.startsWith(type.getValue())) {
return type;
}
} return null;
}
}

  最后是测试类

package org.filetype;

public class Test {

	/**
* @param args
*/
public static void main(String args[]) throws Exception {
System.out.println(FileTypeJudge.getType("C:\\eclipse-jee-helios-win32.zip"));
} }

  

用java流方式判断文件类型的更多相关文章

  1. java代码判断文件类型(判断文件后缀名)

    1.两点需要注意 1.string.spilt("\\.")分割字符串成子字符串数组,以“.”分割,必须写成string.spilt("\\.")的方式,不能写 ...

  2. java文件上传,自动判断文件类型

    public enum FileType { /** * JEPG. */ JPEG("FFD8FF"), /** * PNG. */ PNG("89504E47&quo ...

  3. Java判断文件类型

    通常,在WEB系统中,上传文件时都需要做文件的类型校验,大致有如下几种方法: 1. 通过后缀名,如exe,jpg,bmp,rar,zip等等. 2. 通过读取文件,获取文件的Content-type来 ...

  4. 使用apache.tika判断文件类型

    一. 判断文件类型一般可采用两种方式 1. 后缀名判断 简单易操作,但无法准确判断类型 2. 文件头信息判断 通常可以判断文件类型,但有些文件类型无法判断(如word和excel头信息的前几个字节是一 ...

  5. Python之基于十六进制判断文件类型

    核心代码: #!/usr/bin/env python # -*- coding: utf-8 -*- # @Author : suk import struct from io import Byt ...

  6. JavaScript根据文件名判断文件类型

    //JavaScript根据文件名判断文件类型 var imgExt = new Array(".png",".jpg",".jpeg",& ...

  7. 利用PHP取二进制文件头判断文件类型

    <?php $files = array('D:\no.jpg', 'D:\no.png','D:\no2.JPEG','D:\no.BMP'); $fileTypes = array( 779 ...

  8. Linux中用st_mode判断文件类型

    Linux中用st_mode判断文件类型 2012-12-11 12:41 14214人阅读 评论(4) 收藏 举报  分类: Linux(8)  C/C++(20)  版权声明:本文为博主原创文章, ...

  9. php 读取文件头判断文件类型的实现代码

    php代码实现读取文件头判断文件类型,支持图片.rar.exe等后缀. 例子: <?php $filename = "11.jpg"; //为图片的路径可以用d:/uploa ...

随机推荐

  1. c++应用程序文件的编译过程

    这里讲下C++文件的编译过程及其中模板的编译过程: 一:一般的C++应用程序的编译过程.     一般说来,C++应用程序的编译过程分为三个阶段.模板也是一样的. 在cpp文件中展开include文件 ...

  2. android 几种发送短信的方法

    android中发送短信很简单, 首先要在Mainfest.xml中加入所需要的权限: ? 1 2 3 <uses-permission android:name="android.p ...

  3. RTX51 Tiny实时操作系统学习笔记—初识RTX51 Tiny

     一,RTX51 Tiny简单介绍    RTX51 Tiny是一种实时操作系统(RTOS),能够用它来建立多个任务(函数)同一时候运行的应用(从宏观上看是同一时候运行的,但从微观上看,还是独立运行的 ...

  4. Wi-Fi漫游的工作原理

    Wi-Fi网络的一个极其重要的特点就是移动性.例如,一个人可以在使用Wi-Fi电话进行通话或是从服务器上下载大数据量的文件时穿过一幢建筑物.用户设备内部的Wi-Fi无线电可以从一个接入点漫游至另一个接 ...

  5. [React Testing] JSX error diffs -- expect-jsx library

    When writing React component tests, it can be hard to decipher the error diffs of broken tests, sinc ...

  6. SURF特征

    了解了SIFT特征后,来学习SURF特征. 虽说是SIFT的一个变种,可是跟SIFT还是有差别的 差别有例如以下: 1.尺度空间的构建(近似)不同. 2.同意尺度空间多层图像同一时候被处理 3.特征点 ...

  7. SQL Profile 总结(一)

    一.前提概述 在介绍SQL Profile之前,不得不说的一个工具就是SQL Tuning Advisor:这个工具是从Oracle 10g開始引入,它的任务就是分析一个指定的SQL语句,并建议怎样使 ...

  8. Querylayer(查询图层) - 浅谈

    Querylayer(查询图层)是通过 SQL 查询定义的图层或独立表.通过 Querylayer 可将空间信息和非空间信息都存储在DBMS 中,从而使这些信息可以轻松地整合到 ArcMap 中的各 ...

  9. angularjs使用ng-messages-include实例

    <!DOCTYPE html> <html lang="zh-CN" ng-app="app"> <head> <me ...

  10. c3p0写连接池 Demo

    1.导包 2.配置文件:名称必须为:c3p0-config.xml,且必须放在src根目录下 <c3p0-config> <!-- 默认配置,有且仅可出现一次 ,如果没有指定则使用这 ...