package com.cjw.baidu.ocr;

import lombok.extern.slf4j.Slf4j;

import org.apache.commons.lang3.StringUtils;

import java.io.*;

import java.net.HttpURLConnection;

import java.net.URL;

import java.util.HashMap;

/**

* 检查文件类型

* @author wucj

* @date 2019年10月16日21:48:03

*/

@Slf4j

public class CheckFileType {

/**

* 缓存文件头信息-文件头信息

*/

public static final HashMap mFileTypes = new HashMap();

static {

// images

mFileTypes.put("FFD8FF", "jpg");

mFileTypes.put("89504E47", "png");

mFileTypes.put("47494638", "gif");

mFileTypes.put("49492A00", "tif");

mFileTypes.put("424D", "bmp");

// CAD

mFileTypes.put("41433130", "dwg");

mFileTypes.put("38425053", "psd");

// 日记本

mFileTypes.put("7B5C727466", "rtf");

mFileTypes.put("3C3F786D6C", "xml");

mFileTypes.put("68746D6C3E", "html");

// 邮件

mFileTypes.put("44656C69766572792D646174653A", "eml");

mFileTypes.put("D0CF11E0", "doc");

//excel2003版本文件

mFileTypes.put("D0CF11E0", "xls");

mFileTypes.put("5374616E64617264204A", "mdb");

mFileTypes.put("252150532D41646F6265", "ps");

mFileTypes.put("255044462D312E", "pdf");

mFileTypes.put("504B0304", "docx");

//excel2007以上版本文件

mFileTypes.put("504B0304", "xlsx");

mFileTypes.put("52617221", "rar");

mFileTypes.put("57415645", "wav");

mFileTypes.put("41564920", "avi");

mFileTypes.put("2E524D46", "rm");

mFileTypes.put("000001BA", "mpg");

mFileTypes.put("000001B3", "mpg");

mFileTypes.put("6D6F6F76", "mov");

mFileTypes.put("3026B2758E66CF11", "asf");

mFileTypes.put("4D546864", "mid");

mFileTypes.put("1F8B08", "gz");

}

/**

* filePath获取文件的类型

* @param filePath 文件路径

* @return

* @throws FileNotFoundException

*/

public static String getFileType(String filePath) throws FileNotFoundException {

File file = new File(filePath);

if(file.isDirectory()){

throw new RuntimeException("当前路径是目录");

}

return getFileType(new FileInputStream(file));

}

/**

* url获取文件类型

* @param fileUrl 网络文件url

* @return

* @throws Exception

*/

public static String urlFileType(String fileUrl) throws Exception {

log.info("url:{}获取文件类型",fileUrl);

BufferedInputStream bis = null;

HttpURLConnection urlconnection = null;

URL url = null;

url = new URL(fileUrl);

urlconnection = (HttpURLConnection) url.openConnection();

urlconnection.connect();

String fileType = getFileType(urlconnection.getInputStream());

log.info("url:{}获取文件类型:{}",fileUrl,fileType);

return fileType;

}

/**

* @return 文件头信息

* @author liang.pan

*

* 方法描述:根据输入流获取文件头信息

*/

public static String getFileType(InputStream inputStream) {

return mFileTypes.get(getFileHeader(inputStream));

}

/**

* @return 文件头信息

* 方法描述:根据输入流获取文件头信息

*/

public static String getFileHeader(InputStream inputStream) {

InputStream is = null;

String value = null;

try {

is = inputStream;

byte[] b = new byte[4];

/*

* int read() 从此输入流中读取一个数据字节。int read(byte[] b) 从此输入流中将最多 b.length

* 个字节的数据读入一个 byte 数组中。 int read(byte[] b, int off, int len)

* 从此输入流中将最多 len 个字节的数据读入一个 byte 数组中。

*/

is.read(b, 0, b.length);

value = bytesToHexString(b);

} catch (Exception e) {

} finally {

if (null != is) {

try {

is.close();

} catch (IOException e) {

}

}

}

if (StringUtils.startsWith(value, "FFD8FF")) {

value = value.substring(0, 6);

}

return value;

}

/**

* @param src 要读取文件头信息的文件的byte数组

* @return 文件头信息

*

* 方法描述:将要读取文件头信息的文件的byte数组转换成string类型表示

*/

private static String bytesToHexString(byte[] src) {

StringBuilder builder = new StringBuilder();

if (src == null || src.length <= 0) {

return null;

}

String hv;

for (int i = 0; i < src.length; i++) {

// 以十六进制(基数 16)无符号整数形式返回一个整数参数的字符串表示形式,并转换为大写

hv = Integer.toHexString(src[i] & 0xFF).toUpperCase();

if (hv.length() < 2) {

builder.append(0);

}

builder.append(hv);

}

return builder.toString();

}

}

java获取url文件格式_本地文件/url获取文件类型相关推荐

  1. excel 获取url图片_从Excel超链接获取URL

    excel 获取url图片 Last week on the Bacon Bits blog, Mike Alexander showed how to send an email with the ...

  2. java微信获取用户列表_微信公众平台 获取用户列表

    一.接口说明 公众号可通过本接口来获取帐号的关注者列表,关注者列表由一串OpenID(加密后的微信号,每个用户对每个公众号的OpenID是唯一的)组成.一次拉取调用最多拉取10000个关注者的Open ...

  3. flex java 上传下载_完整的Flex多文件上传实例

    客户端代码:fileUpload.xml-------------------------------------------------------------------------------- ...

  4. java 热门搜索 实现_热门搜索词获取java版

    日常生活中经常会有这样的需求,就是网站上.app上需要展示近期热搜的一些词汇,其实常用的做法当然是自己写爬虫去爬,不过这种办法是在太麻烦了,为了节省时间,可以调用一些接口来实现,比如常用的聚合数据,小 ...

  5. vue如何使浏览器url固定_关于前端url加密方式总结 (Vue-cli中使用)

    下边是url加密和解密方法 /** * url参数加密 * 传入json格式的串 * @param {*Object} query */ const EncryUrl = query => { ...

  6. java 处理pdb文件格式_科学网—PDB文件格式说明 - 李继存的博文

    2015-06-05 20:31:19 2017-01-22 20:09:21 据参考资料增补 PDB(Protein Data Bank)是一种标准文件格式, 其中包含原子的坐标等信息, 提交给 P ...

  7. java 图像刺绣算法_图像处理:OpenCV3源代码文件解析

    引言 结合冈萨雷斯的<数字图像处理>和Opencv3.0,学习图像处理算法有一段时间了,知道了函数怎么使用,但不知道opencv所用的函数源代码是如何编写的,"知其然,也要知其所 ...

  8. java log4j 代码配置文件_除了Log4jXML、属性文件和源代码(主要是Java)之外的配置日志的方法?...

    我在看一些应用程序的源代码.它正在使用 Spring框架.Apache瓦片.JSP.Log4J.Java.JavaScript.jQuery.JQPrand.Jsch 等. 我知道日志是在哪里创建的. ...

  9. java 解析mp4_MP4文件格式的解析,以及MP4文件的分割算法

    MP4文件格式的解析,以及MP4文件的分割算法 mp4应该算是一种比较复杂的媒体格式了,起源于QuickTime.以前研究的时候就花了一番的功夫,尤其是如何把它完美的融入到视频点播应用中,更是费尽了心 ...

最新文章

  1. 【ACM】Doubly Linked List(STL list)
  2. K8s如何改变美团的云基础设施?
  3. 分享10个效率实用工具,让你更优雅地使用windows
  4. python入门指南 小说-Python 入门指南
  5. stm32Flash模拟eeprom心得(原创)
  6. 百度语音识别技术负责人李先刚:如何利用Deep CNN大幅提升识别准确率?
  7. 面试官:序列化和反序列化为什么要实现Serializable接口?
  8. 第44讲:scrapy中间键Middleware的使用
  9. ArcPad 10 使用与同步 ArcGIS Server 的数据全攻略(二)
  10. cad中lisp文件给恶作剧_AutoCAD小秘密062:紧急插播,关于LISP的病毒防治
  11. Python修改屏幕分辨率
  12. 3 Directory traversal
  13. java rsa 文件加密解密_RSA 加密、解密(自己生成加密解密文件)
  14. 数据链路层-点对点通信方式
  15. 视频产生的本质及色彩空间:RGB 和 YUV
  16. OCIOS开发小技巧总结
  17. css3——3D动画、transform-style:preserve-3d、transform:perspective()、perspective-origin
  18. Wr720n改装OpenWrt打印服务器实现网络无线打印
  19. 压缩感知与临近点算子
  20. 利用widget实现一个时钟功能小插件

热门文章

  1. js中整除符号,JavaScript 语法:运算符号
  2. DNSPod十问李开复:为什么我们对AI既期待又害怕?
  3. 最新版pycharm的find_element_by_xpath加上删除线怎么解决?
  4. GIS技巧100例—03 ArcGIS导入SketchUp模型
  5. 看到新同事的工资后,我退出了群聊
  6. OSChina 周二乱弹 ——没见过八宝山车神啊!
  7. 无限键盘和鼠标的蓝牙发射器坏掉了,怎么办
  8. mysql数据库中查看当前使用的数据库是哪个数据库?
  9. 跟老师“隔空”讨论作业,全息技术颠覆教育离我们还有多远?
  10. Java版人脸跟踪三部曲之三:编码实战