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

我把多余的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. 斯坦福团队开发智能盲杖,搭载激光雷达,可探测障碍规划路线,完全开源可在家DIY...
  2. oracle经常使用函数(1)
  3. 只用一分钟,给你的宽带加速
  4. 信号与系统-2021年春季学期-考试信息
  5. android如何使用ios14组件,ios14小组件怎么添加 苹果ios14小组件添加使用教程
  6. 数据库sql课程设计_SQL和数据库-初学者完整课程
  7. Win11如何开启旧版组件 Win11开启旧版组件的方法
  8. Mysql count 的多种使用方式性能比较
  9. brew 安装php56,homebrew安装php5.6后的信息
  10. 开个坑: gitk和git容易被滥用的 cherry-pick 功能
  11. python继承中的参数_python 继承中的super
  12. 第二阶段冲刺 第一天
  13. 推荐几款不错的企业网站,前端设计师寻求设计灵感!
  14. java 求tan角度求值_知道sin、cos、tan的角度如何求值,不用计算器
  15. 互联网商业模式O2O、C2C、B2B、B2C等介绍
  16. Lecture06:市场出清问题的鲁棒方法
  17. 二级分销系统开发源码可以用多久?
  18. java标准输出输入(Scaner类)
  19. mysql锁表查询和解锁操作
  20. interrupt using

热门文章

  1. 0-1背包问题详解(一步一步超详细)
  2. Cocos Creator 发布到微信小游戏的资源管理
  3. win7系统可以用于授时服务器吗,ntp授时(电脑授时服务器)
  4. python编程基础(文字版)
  5. 【AI绘图】一、stable diffusion的发展史
  6. Python中文件的读取和写入
  7. 线程和进程/阻塞和挂起
  8. gets()和puts()
  9. 狗屁不通文章生成器写的文章,评分软件赞不绝口
  10. VSCode rust-analyzer failed to load workspace: can‘t find Cargo.toml 或could not find Cargo.toml