根据文件头信息来判断文件类型
常用的判断文件类型的方法 有 根据文件类型,文件后缀,这里有一种方法,根据文件头信息来判断文件类型。
我把多余的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;}
根据文件头信息来判断文件类型相关推荐
- 16进制文件头笔记及文件类型判断代码
之前做过一个功能,说是上传文件到服务器,但是所有文件excel.word.音乐.视频等都上传到一个文件夹,不利于查找,于是自己上网查询关于这方面的资料,决定按文件后缀名,给文件进行分类,存放不同的文件 ...
- 利用文件头标志判断文件类型
简介 我们都知道,文件的扩展名是用来识别文件类型的.通过给他指定扩展名,我们可以告诉自己,也告诉操作系统我们想用什么方式打开这个文件.比如我么会把.jpg的文件默认用图片显示软件打开,.zip 文件会 ...
- java 获取文件头中的文件类型
通过文件t殴获取文件的类型 转载自https://blog.csdn.net/kevin8290/article/details/72643619 public class FileTypeUt ...
- java:根据文件头来判断文件类型
根据文件后缀来判断文件类型,往往是不靠谱的,因为要考虑到,可能人为的更改文件后缀,导致一些问题. 因此,下面是详细的根据文件头信息来判断文件类型. 文件头的十六进制以后继续补充. package co ...
- java判断文件头_java通过文件头来判断文件类型
importjava.io.FileInputStream;importjava.io.IOException;importjava.util.HashMap;importjava.util.Map. ...
- sublime 设置新建文件自动添加author(作者)等文件头信息
很多时候, sublime 自带自动添加文件头信息, 但是并不是我们想要比如下面这样的: 新建一个python文件 自动添加的author 信息 == 上面并不是我想要的, 我想要下面这样的效果: = ...
- 用ffmpeg修改MP4文件头信息,使其支持流式加载及播放
经常有用户反映,有些网页中加载的mp4文件,有的可以加载一点就开始播放,有的就必须全部加载完才能播. 经核实,主要是头信息的数据顺序有关,用工具:mp4info.exe可以查看mp4文件的结构信息: ...
- html的文件头标志,各类文件的文件头标志.docx
各类文件的文件头标志.docx 还剩 12页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,很抱歉,此页已超出免费预览范围啦! 如果喜欢就下载吧,价低环保! 内容要点: 扩展名 文件头标识( ...
- Java根据文件头文件信息判断文件类型
InputStream in = file.getInputStream(); //根据文件头获取文件类型 String type = FileType.getFileType(in); 注意file ...
最新文章
- 斯坦福团队开发智能盲杖,搭载激光雷达,可探测障碍规划路线,完全开源可在家DIY...
- oracle经常使用函数(1)
- 只用一分钟,给你的宽带加速
- 信号与系统-2021年春季学期-考试信息
- android如何使用ios14组件,ios14小组件怎么添加 苹果ios14小组件添加使用教程
- 数据库sql课程设计_SQL和数据库-初学者完整课程
- Win11如何开启旧版组件 Win11开启旧版组件的方法
- Mysql count 的多种使用方式性能比较
- brew 安装php56,homebrew安装php5.6后的信息
- 开个坑: gitk和git容易被滥用的 cherry-pick 功能
- python继承中的参数_python 继承中的super
- 第二阶段冲刺 第一天
- 推荐几款不错的企业网站,前端设计师寻求设计灵感!
- java 求tan角度求值_知道sin、cos、tan的角度如何求值,不用计算器
- 互联网商业模式O2O、C2C、B2B、B2C等介绍
- Lecture06:市场出清问题的鲁棒方法
- 二级分销系统开发源码可以用多久?
- java标准输出输入(Scaner类)
- mysql锁表查询和解锁操作
- interrupt using
热门文章
- 0-1背包问题详解(一步一步超详细)
- Cocos Creator 发布到微信小游戏的资源管理
- win7系统可以用于授时服务器吗,ntp授时(电脑授时服务器)
- python编程基础(文字版)
- 【AI绘图】一、stable diffusion的发展史
- Python中文件的读取和写入
- 线程和进程/阻塞和挂起
- gets()和puts()
- 狗屁不通文章生成器写的文章,评分软件赞不绝口
- VSCode rust-analyzer failed to load workspace: can‘t find Cargo.toml 或could not find Cargo.toml