常用的判断文件类型的方法 有 根据文件类型,文件后缀,这里有一种方法,根据文件头信息来判断文件类型。

我把多余的getAllFileType()  给注释掉了,可以根据使用来选择。

这个参考了,忘了地址了


import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import javax.imageio.ImageIO;
import javax.imageio.ImageReader;
import javax.imageio.stream.ImageInputStream;
import org.springframework.web.multipart.MultipartFile;  public class FileTypeTest
{    public final static Map<String, String> FILE_TYPE_MAP = new HashMap<String, String>();    private FileTypeTest(){}    static{    getAllFileType();  //初始化文件类型信息    }    /**  * [getAllFileType,常见文件头信息]*/    private static void getAllFileType()    {
//        FILE_TYPE_MAP.put("jpg", "FFD8FF"); //JPEG (jpg)
//        FILE_TYPE_MAP.put("png", "89504E47");  //PNG (png)
//        FILE_TYPE_MAP.put("gif", "47494638");  //GIF (gif)
//        FILE_TYPE_MAP.put("tif", "49492A00");  //TIFF (tif)
//        FILE_TYPE_MAP.put("bmp", "424D"); //Windows Bitmap (bmp)
//        FILE_TYPE_MAP.put("dwg", "41433130"); //CAD (dwg)
//        FILE_TYPE_MAP.put("html", "68746D6C3E");  //HTML (html)
//        FILE_TYPE_MAP.put("rtf", "7B5C727466");  //Rich Text Format (rtf)
//        FILE_TYPE_MAP.put("xml", "3C3F786D6C");
//        FILE_TYPE_MAP.put("zip", "504B0304");
//        FILE_TYPE_MAP.put("rar", "52617221");
//        FILE_TYPE_MAP.put("psd", "38425053");  //Photoshop (psd)
//        FILE_TYPE_MAP.put("eml", "44656C69766572792D646174653A");  //Email [thorough only] (eml)
//        FILE_TYPE_MAP.put("dbx", "CFAD12FEC5FD746F");  //Outlook Express (dbx)
//        FILE_TYPE_MAP.put("pst", "2142444E");  //Outlook (pst)    FILE_TYPE_MAP.put("xls", "D0CF11E0");  //MS Word
//        FILE_TYPE_MAP.put("doc", "D0CF11E0");  //MS Excel 注意:word 和 excel的文件头一样
//        FILE_TYPE_MAP.put("mdb", "5374616E64617264204A");  //MS Access (mdb)
//        FILE_TYPE_MAP.put("wpd", "FF575043"); //WordPerfect (wpd)
//        FILE_TYPE_MAP.put("eps", "252150532D41646F6265");
//        FILE_TYPE_MAP.put("ps", "252150532D41646F6265");
//        FILE_TYPE_MAP.put("pdf", "255044462D312E");  //Adobe Acrobat (pdf)
//        FILE_TYPE_MAP.put("qdf", "AC9EBD8F");  //Quicken (qdf)
//        FILE_TYPE_MAP.put("pwl", "E3828596");  //Windows Password (pwl)
//        FILE_TYPE_MAP.put("wav", "57415645");  //Wave (wav)
//        FILE_TYPE_MAP.put("avi", "41564920");
//        FILE_TYPE_MAP.put("ram", "2E7261FD");  //Real Audio (ram)
//        FILE_TYPE_MAP.put("rm", "2E524D46");  //Real Media (rm)
//        FILE_TYPE_MAP.put("mpg", "000001BA");  //
//        FILE_TYPE_MAP.put("mov", "6D6F6F76");  //Quicktime (mov)
//        FILE_TYPE_MAP.put("asf", "3026B2758E66CF11"); //Windows Media (asf)
//        FILE_TYPE_MAP.put("mid", "4D546864");  //MIDI (mid)    }    //    public static void main(String[] args) throws Exception
//    {
//        File f = new File("c://juan.gif");
//        if (f.exists())
//        {
//            String filetype1 = getImageFileType(f);
//            System.out.println(filetype1);
//            String filetype2 = getFileByFile(f);
//            System.out.println(filetype2);
//        }
//    }    /**  * getImageFileType,获取图片文件实际类型,若不是图片则返回null* @param File  * @return fileType  */    public final static String getImageFileType(File f)    {    if (isImage(f))  {  try  {  ImageInputStream iis = ImageIO.createImageInputStream(f);  Iterator<ImageReader> iter = ImageIO.getImageReaders(iis);  if (!iter.hasNext())  {  return null;  }  ImageReader reader = iter.next();  iis.close();  return reader.getFormatName();  }  catch (IOException e)  {  return null;  }  catch (Exception e)  {  return null;  }  }  return null;  }    /**  * getFileByFile,获取文件类型,包括图片,若格式不是已配置的,则返回null* @param file  * @return fileType  */    public final static String getFileByFile(File file)    {    String filetype = null;    byte[] b = new byte[50];    try    {    InputStream is = new FileInputStream(file);    is.read(b);    filetype = getFileTypeByStream(b);    is.close();    }    catch (FileNotFoundException e)    {    e.printStackTrace();    }    catch (IOException e)    {    e.printStackTrace();    }    return filetype;    }    /***  .获取文件类型,MultipartFile这个类型是页面上传常用到的* @param file* @return*/public final static String getMultipartFileByFile(MultipartFile file)    {    String filetype = null;    byte[] b = new byte[50];    try    {    InputStream is = file.getInputStream();is.read(b);    filetype = getFileTypeByStream(b);    is.close();    }    catch (FileNotFoundException e)    {    e.printStackTrace();    }    catch (IOException e)    {    e.printStackTrace();    }    return filetype;    }public final static String getFileTypeByStream(byte[] b)    {    String filetypeHex = String.valueOf(getFileHexString(b));    Iterator<Entry<String, String>> entryiterator = FILE_TYPE_MAP.entrySet().iterator();    while (entryiterator.hasNext()) {    Entry<String,String> entry =  entryiterator.next();    String fileTypeHexValue = entry.getValue();    if (filetypeHex.toUpperCase().startsWith(fileTypeHexValue)) {    return entry.getKey();    }    }    return null;    }    /** * isImage,判断文件是否为图片]* @param file * @return true 是 | false 否 */  public static final boolean isImage(File file){  boolean flag = false;  try  {  BufferedImage bufreader = ImageIO.read(file);  int width = bufreader.getWidth();  int height = bufreader.getHeight();  if(width==0 || height==0){  flag = false;  }else {  flag = true;  }  }  catch (IOException e)  {  flag = false;  }catch (Exception e) {  flag = false;  }  return flag;  }  public final static String getFileHexString(byte[] b)    {    StringBuilder stringBuilder = new StringBuilder();    if (b == null || b.length <= 0)    {    return null;    }    for (int i = 0; i < b.length; i++)    {    int v = b[i] & 0xFF;    String hv = Integer.toHexString(v);    if (hv.length() < 2)    {    stringBuilder.append(0);    }    stringBuilder.append(hv);    }    return stringBuilder.toString();    }
} ​

使用的时候,比较简单

         //获取MultipartFile对象// MultipartFile file=multipartFiles.get(index);//通过文件头来判断xlsString filetype=FileTypeTest.getMultipartFileByFile(file);if(!filetype.equals("xls")){writer.write("请选择.xls文件!");writer.flush();return;}

根据文件头信息来判断文件类型相关推荐

  1. 16进制文件头笔记及文件类型判断代码

    之前做过一个功能,说是上传文件到服务器,但是所有文件excel.word.音乐.视频等都上传到一个文件夹,不利于查找,于是自己上网查询关于这方面的资料,决定按文件后缀名,给文件进行分类,存放不同的文件 ...

  2. 利用文件头标志判断文件类型

    简介 我们都知道,文件的扩展名是用来识别文件类型的.通过给他指定扩展名,我们可以告诉自己,也告诉操作系统我们想用什么方式打开这个文件.比如我么会把.jpg的文件默认用图片显示软件打开,.zip 文件会 ...

  3. java 获取文件头中的文件类型

    通过文件t殴获取文件的类型    转载自https://blog.csdn.net/kevin8290/article/details/72643619 public class FileTypeUt ...

  4. java:根据文件头来判断文件类型

    根据文件后缀来判断文件类型,往往是不靠谱的,因为要考虑到,可能人为的更改文件后缀,导致一些问题. 因此,下面是详细的根据文件头信息来判断文件类型. 文件头的十六进制以后继续补充. package co ...

  5. java判断文件头_java通过文件头来判断文件类型

    importjava.io.FileInputStream;importjava.io.IOException;importjava.util.HashMap;importjava.util.Map. ...

  6. sublime 设置新建文件自动添加author(作者)等文件头信息

    很多时候, sublime 自带自动添加文件头信息, 但是并不是我们想要比如下面这样的: 新建一个python文件 自动添加的author 信息 == 上面并不是我想要的, 我想要下面这样的效果: = ...

  7. 用ffmpeg修改MP4文件头信息,使其支持流式加载及播放

    经常有用户反映,有些网页中加载的mp4文件,有的可以加载一点就开始播放,有的就必须全部加载完才能播. 经核实,主要是头信息的数据顺序有关,用工具:mp4info.exe可以查看mp4文件的结构信息: ...

  8. html的文件头标志,各类文件的文件头标志.docx

    各类文件的文件头标志.docx 还剩 12页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,很抱歉,此页已超出免费预览范围啦! 如果喜欢就下载吧,价低环保! 内容要点: 扩展名 文件头标识( ...

  9. Java根据文件头文件信息判断文件类型

    InputStream in = file.getInputStream(); //根据文件头获取文件类型 String type = FileType.getFileType(in); 注意file ...

最新文章

  1. Spring源码分析【8】-分布式环境SpringSecurity保持用户会话
  2. CTFshow 信息收集 web12
  3. 5.2 matlab多项式计算(多项式的四则运算、求导、求值、求根)
  4. CountDownLatch、CyclicBarrier、Semaphore的区别,你知道吗?
  5. 台湾大学林轩田机器学习技法课程学习笔记4 -- Soft-Margin Support Vector Machine
  6. #line预编译字分析
  7. hihocoder #1617 : 方格取数(dp)
  8. 百度入股电商直播服务商“卡美啦” 备战2020年双11
  9. vivado中bit文件怎么没有生成_「干货」FPGA设计中深度约束技巧及调试经验总结...
  10. 趣店斗鱼深陷裁员风波,程序员寒冬何去何从?| 畅言
  11. linux 适配电脑内核,Linux内核实践 如何添加网络协议[三]:实现 -电脑资料
  12. localstorage和sessionStorage和cookies
  13. 国内外流行的JS游戏开发框架介绍---kalrry
  14. Spring入门之bean的配置
  15. 计量模型 | 前定变量#时间FE
  16. 小米笔记本U盘win10换win7系统操作教程
  17. 计算机网络演进,计算机网络演进之路
  18. (最新整理)国内网页设计网站网址大全(转)
  19. 右键计算机管理打开记事本,右键菜单怎么加入“用记事本方式打开”
  20. BRL_CAD 教程

热门文章

  1. mysql数据个人总结_mysql数据库设计总结(个人经验)
  2. 收藏关于wifi技术论坛
  3. @Async注解其实也就这么回事
  4. c/c++代码获取网络时间(从NTP授时服务器获取)
  5. [翻译] 微软正式宣布 .NET 5版本
  6. 抬杠: 有腔调的语音抬杠对话社区
  7. 通常在班班通教室使用的计算机是,班班通使用方法
  8. 网络工程师必备console线介绍
  9. threejs-相机
  10. Passive Event Listener