java 生成msg文件_java – 如何获取.MSG文件的MIME类型?
我尝试了一些可能的方法,并使用tika给出您的期望结果,我没有看到您使用的代码,所以我无法仔细检查。
我尝试了不同的方式,并不是所有的代码片段:
> Java 7 Files.probeContentType(path)
> URLConnection mime检测从文件名和内容类型猜测
> JDK 6 JAF API javax.activation.MimetypesFileTypeMap
> MimeUtil与我发现的所有可用的MimeDetector子类
> Apache Tika
> Apache POI暂存器
这里的测试类:
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.net.URLConnection;
import java.util.Collection;
import javax.activation.MimetypesFileTypeMap;
import org.apache.tika.detect.Detector;
import org.apache.tika.metadata.Metadata;
import org.apache.tika.mime.MediaType;
import org.apache.tika.parser.AutoDetectParser;
import eu.medsea.mimeutil.MimeUtil;
public class FindMime {
public static void main(String[] args) {
File file = new File("C:\\Users\\qwerty\\Desktop\\test.msg");
System.out.println("urlConnectionGuess " + urlConnectionGuess(file));
System.out.println("fileContentGuess " + fileContentGuess(file));
MimetypesFileTypeMap mimeTypesMap = new MimetypesFileTypeMap();
System.out.println("mimeTypesMap.getContentType " + mimeTypesMap.getContentType(file));
System.out.println("mimeutils " + mimeutils(file));
System.out.println("tika " + tika(file));
}
private static String mimeutils(File file) {
try {
MimeUtil.registerMimeDetector("eu.medsea.mimeutil.detector.MagicMimeMimeDetector");
MimeUtil.registerMimeDetector("eu.medsea.mimeutil.detector.ExtensionMimeDetector");
// MimeUtil.registerMimeDetector("eu.medsea.mimeutil.detector.OpendesktopMimeDetector");
MimeUtil.registerMimeDetector("eu.medsea.mimeutil.detector.WindowsRegistryMimeDetector");
// MimeUtil.registerMimeDetector("eu.medsea.mimeutil.detector.TextMimeDetector");
InputStream is = new BufferedInputStream(new FileInputStream(file));
Collection> mimeTypes = MimeUtil.getMimeTypes(is);
return mimeTypes.toString();
} catch (Exception e) {
// TODO: handle exception
}
return null;
}
private static String tika(File file) {
try {
InputStream is = new BufferedInputStream(new FileInputStream(file));
AutoDetectParser parser = new AutoDetectParser();
Detector detector = parser.getDetector();
Metadata md = new Metadata();
md.add(Metadata.RESOURCE_NAME_KEY, "test.msg");
MediaType mediaType = detector.detect(is, md);
return mediaType.toString();
} catch (Exception e) {
// TODO: handle exception
}
return null;
}
private static String urlConnectionGuess(File file) {
String mimeType = URLConnection.guessContentTypeFromName(file.getName());
return mimeType;
}
private static String fileContentGuess(File file) {
try {
InputStream is = new BufferedInputStream(new FileInputStream(file));
return URLConnection.guessContentTypeFromStream(is);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
这是输出:
urlConnectionGuess null
fileContentGuess null
mimeTypesMap.getContentType application/octet-stream
mimeutils application/msword,application/x-hwp
tika application/vnd.ms-outlook
更新我添加了这种方法来测试其他方式与Tika:
private static void tikaMore(File file) {
Tika defaultTika = new Tika();
Tika mimeTika = new Tika(new MimeTypes());
Tika typeTika = new Tika(new TypeDetector());
try {
System.out.println(defaultTika.detect(file));
System.out.println(mimeTika.detect(file));
System.out.println(typeTika.detect(file));
} catch (Exception e) {
// TODO: handle exception
}
}
使用无扩展名的msg文件进行测试:
application/vnd.ms-outlook
application/octet-stream
application/octet-stream
用txt文件重新命名为msg进行测试:
text/plain
text/plain
application/octet-stream
在这种情况下,似乎最简单的方式是使用空构造函数是最可靠的。
更新可以使用Apache POI暂存器来制作自己的检查器,例如,如果文件不正确的格式(通常是org.apache.poi.poifs.filesystem.NotOLE2FileException),这是一个简单的实现来获取消息的MIME,或者为null :无效的标题签名):
import org.apache.poi.hsmf.MAPIMessage;
public class PoiMsgMime {
public String getMessageMime(String fileName) {
try {
new MAPIMessage(fileName);
return "application/vnd.ms-outlook";
} catch (Exception e) {
return null;
}
}
}
java 生成msg文件_java – 如何获取.MSG文件的MIME类型?相关推荐
- Python 实现office单个文件或整个文件夹(word,ppt,excel)转换成PDF文件,并获取PDF文件页数
Python 实现office单个文件或整个文件夹(word,ppt,excel)转换成PDF文件,并获取PDF文件页数 文件夹中获取需要转换的文件数,将其全部转换或可单独转换单个文件,并获取转成PD ...
- Python语言学习:创建/删除文件/文件夹、获取当前文件/文件夹路径(系统环境路径/目录)、获取当前文件夹下的所有子文件路径等代码(os系列用法)实现之详细攻略
Python语言学习:创建/删除文件/文件夹.获取当前文件/文件夹路径(系统环境路径/目录).获取当前文件夹下的所有子文件路径等代码(os系列用法)实现之详细攻略 目录 系统环境路径的设置 1.sys ...
- linux下qt浏览word文件内容,Qt获取office文件内容
Qt获取office文件内容 需要获取word文件的文件内容.网上找了好久,大部分都是excel的.而word的很少.所以在这里记录一下,方便大家查阅和自己使用. 使用的Qt版本是5.4.2 . 下面 ...
- java资源文件路径_Java 中获取资源(文件)的路径问题总结
Java 中获取资源(文件)的路径问题总结 首先,Java 中获取资源大体上可分为两种方式,基于 文件系统的 和 基于classpath的. 1. 基于文件系统的相对简单. 比如 构造一个File f ...
- java生成txt表格_java读取txt文件表格并生成新txt
展开全部 可以使用java中的I/O流来读取文件并生产新文件,给你个代码例子:import java.io.BufferedReader; import java.io.File; import ja ...
- java获取文件绝对路径_java 如何获取一个文件的绝对路径。。。
你的位置: 问答吧 -> JSP -> 问题详情 java 如何获取一个文件的绝对路径... 例如 InputStream inStream=new FileInputStream(&qu ...
- java获得sftp目录_Java代码获取SFTP服务器文件
1 /** 2 *@authorshansm3 * @date 2020/3/18 -17:274 */ 5 public classSFTPUtil {6 7 private transient L ...
- java上传加密_Java上传下载文件并实现加密解密
使用 Jersey 服务器实现上传,使用 HTTP 请求实现下载 引入依赖 在 pom.xml 中添加 Jersey 相关依赖 com.sun.jersey jersey-client 1.18.1 ...
- java生成pdf表格_java在pdf中生成表格的方法
1.目标 在pdf中生成一个可变表头的表格,并向其中填充数据.通过泛型动态的生成表头,通过反射动态获取实体类(我这里是User)的get方法动态获得数据,从而达到动态生成表格. 每天生成一个文件夹存储 ...
最新文章
- 超高损人技巧~~不可不看
- 微信小程序开发之微信支付
- 美国教授北大演讲:并不是每个人都适合做学术
- python遍历树结构_python 数据结构与算法——树的遍历
- 打印五行五列的直角三角形
- matlab 工具函数(一) —— 添加指定 SNR 的噪声
- 五、隐函数微分法和逆函数导数 六、指数与对数函数导数、对数微分法 七、第一次考试复习
- 一个大一学生学习C语言的心得
- 动手学深度学习(第六章 循环神经网络)
- PTA实验4-1-3 找出最小值 (20分) 本题要求编写程序,找出给定一系列整数中的最小值。
- D3.js用动画渲染数据集的显示
- 【华为机试029】合唱队
- c++中关于设置左对齐和右对齐的问题解决方法
- kedacom摄像头怎么预置_科达KEDACOM TrueVixon100视频会议摄像头
- linux看剩余电量命令,Linux终端如何检查笔记本电脑电池的状态和电量
- 单片机:数字式时钟—日历
- 大象又要跳舞了,中国移动的用户再度加速增长
- Solidworks图标出现启动不了的情况怎么办
- 编译release版本签名系统
- 在少儿编程中使用easygui(5):ynbox/boolbox/ccbox
热门文章
- How to resolve empty table CRMATAB issue in ERP gt_crmtab[]
- SAP Spartacus organization unit里org list的focus实现问题
- SAP Hybris backoffice登录时的语言选择
- wiki的watch设置
- 在TCP客户端连接成功的回调函数里,无法访问到客户端套接字的明细
- oracle时间类型转化成java对象_Oracle数据库date类型与Java中Date的联系与转化
- mysql监控sql_关于对mysql语句进行监控的方法详解
- 算法学习:最近公共祖先
- 最小表达式_C# 09.找最大和最小的数字
- oracle 韩思捷_ORACLE数据库技术实用详解:教你如何成为10g OCP