java获取url文件格式_本地文件/url获取文件类型
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获取文件类型相关推荐
- excel 获取url图片_从Excel超链接获取URL
excel 获取url图片 Last week on the Bacon Bits blog, Mike Alexander showed how to send an email with the ...
- java微信获取用户列表_微信公众平台 获取用户列表
一.接口说明 公众号可通过本接口来获取帐号的关注者列表,关注者列表由一串OpenID(加密后的微信号,每个用户对每个公众号的OpenID是唯一的)组成.一次拉取调用最多拉取10000个关注者的Open ...
- flex java 上传下载_完整的Flex多文件上传实例
客户端代码:fileUpload.xml-------------------------------------------------------------------------------- ...
- java 热门搜索 实现_热门搜索词获取java版
日常生活中经常会有这样的需求,就是网站上.app上需要展示近期热搜的一些词汇,其实常用的做法当然是自己写爬虫去爬,不过这种办法是在太麻烦了,为了节省时间,可以调用一些接口来实现,比如常用的聚合数据,小 ...
- vue如何使浏览器url固定_关于前端url加密方式总结 (Vue-cli中使用)
下边是url加密和解密方法 /** * url参数加密 * 传入json格式的串 * @param {*Object} query */ const EncryUrl = query => { ...
- java 处理pdb文件格式_科学网—PDB文件格式说明 - 李继存的博文
2015-06-05 20:31:19 2017-01-22 20:09:21 据参考资料增补 PDB(Protein Data Bank)是一种标准文件格式, 其中包含原子的坐标等信息, 提交给 P ...
- java 图像刺绣算法_图像处理:OpenCV3源代码文件解析
引言 结合冈萨雷斯的<数字图像处理>和Opencv3.0,学习图像处理算法有一段时间了,知道了函数怎么使用,但不知道opencv所用的函数源代码是如何编写的,"知其然,也要知其所 ...
- java log4j 代码配置文件_除了Log4jXML、属性文件和源代码(主要是Java)之外的配置日志的方法?...
我在看一些应用程序的源代码.它正在使用 Spring框架.Apache瓦片.JSP.Log4J.Java.JavaScript.jQuery.JQPrand.Jsch 等. 我知道日志是在哪里创建的. ...
- java 解析mp4_MP4文件格式的解析,以及MP4文件的分割算法
MP4文件格式的解析,以及MP4文件的分割算法 mp4应该算是一种比较复杂的媒体格式了,起源于QuickTime.以前研究的时候就花了一番的功夫,尤其是如何把它完美的融入到视频点播应用中,更是费尽了心 ...
最新文章
- 【ACM】Doubly Linked List(STL list)
- K8s如何改变美团的云基础设施?
- 分享10个效率实用工具,让你更优雅地使用windows
- python入门指南 小说-Python 入门指南
- stm32Flash模拟eeprom心得(原创)
- 百度语音识别技术负责人李先刚:如何利用Deep CNN大幅提升识别准确率?
- 面试官:序列化和反序列化为什么要实现Serializable接口?
- 第44讲:scrapy中间键Middleware的使用
- ArcPad 10 使用与同步 ArcGIS Server 的数据全攻略(二)
- cad中lisp文件给恶作剧_AutoCAD小秘密062:紧急插播,关于LISP的病毒防治
- Python修改屏幕分辨率
- 3 Directory traversal
- java rsa 文件加密解密_RSA 加密、解密(自己生成加密解密文件)
- 数据链路层-点对点通信方式
- 视频产生的本质及色彩空间:RGB 和 YUV
- OCIOS开发小技巧总结
- css3——3D动画、transform-style:preserve-3d、transform:perspective()、perspective-origin
- Wr720n改装OpenWrt打印服务器实现网络无线打印
- 压缩感知与临近点算子
- 利用widget实现一个时钟功能小插件
热门文章
- js中整除符号,JavaScript 语法:运算符号
- DNSPod十问李开复:为什么我们对AI既期待又害怕?
- 最新版pycharm的find_element_by_xpath加上删除线怎么解决?
- GIS技巧100例—03 ArcGIS导入SketchUp模型
- 看到新同事的工资后,我退出了群聊
- OSChina 周二乱弹 ——没见过八宝山车神啊!
- 无限键盘和鼠标的蓝牙发射器坏掉了,怎么办
- mysql数据库中查看当前使用的数据库是哪个数据库?
- 跟老师“隔空”讨论作业,全息技术颠覆教育离我们还有多远?
- Java版人脸跟踪三部曲之三:编码实战