我尝试了一些可能的方法,并使用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类型?相关推荐

  1. Python 实现office单个文件或整个文件夹(word,ppt,excel)转换成PDF文件,并获取PDF文件页数

    Python 实现office单个文件或整个文件夹(word,ppt,excel)转换成PDF文件,并获取PDF文件页数 文件夹中获取需要转换的文件数,将其全部转换或可单独转换单个文件,并获取转成PD ...

  2. Python语言学习:创建/删除文件/文件夹、获取当前文件/文件夹路径(系统环境路径/目录)、获取当前文件夹下的所有子文件路径等代码(os系列用法)实现之详细攻略

    Python语言学习:创建/删除文件/文件夹.获取当前文件/文件夹路径(系统环境路径/目录).获取当前文件夹下的所有子文件路径等代码(os系列用法)实现之详细攻略 目录 系统环境路径的设置 1.sys ...

  3. linux下qt浏览word文件内容,Qt获取office文件内容

    Qt获取office文件内容 需要获取word文件的文件内容.网上找了好久,大部分都是excel的.而word的很少.所以在这里记录一下,方便大家查阅和自己使用. 使用的Qt版本是5.4.2 . 下面 ...

  4. java资源文件路径_Java 中获取资源(文件)的路径问题总结

    Java 中获取资源(文件)的路径问题总结 首先,Java 中获取资源大体上可分为两种方式,基于 文件系统的 和 基于classpath的. 1. 基于文件系统的相对简单. 比如 构造一个File f ...

  5. java生成txt表格_java读取txt文件表格并生成新txt

    展开全部 可以使用java中的I/O流来读取文件并生产新文件,给你个代码例子:import java.io.BufferedReader; import java.io.File; import ja ...

  6. java获取文件绝对路径_java 如何获取一个文件的绝对路径。。。

    你的位置: 问答吧 -> JSP -> 问题详情 java 如何获取一个文件的绝对路径... 例如 InputStream inStream=new FileInputStream(&qu ...

  7. java获得sftp目录_Java代码获取SFTP服务器文件

    1 /** 2 *@authorshansm3 * @date 2020/3/18 -17:274 */ 5 public classSFTPUtil {6 7 private transient L ...

  8. java上传加密_Java上传下载文件并实现加密解密

    使用 Jersey 服务器实现上传,使用 HTTP 请求实现下载 引入依赖 在 pom.xml 中添加 Jersey 相关依赖 com.sun.jersey jersey-client 1.18.1 ...

  9. java生成pdf表格_java在pdf中生成表格的方法

    1.目标 在pdf中生成一个可变表头的表格,并向其中填充数据.通过泛型动态的生成表头,通过反射动态获取实体类(我这里是User)的get方法动态获得数据,从而达到动态生成表格. 每天生成一个文件夹存储 ...

最新文章

  1. 超高损人技巧~~不可不看
  2. 微信小程序开发之微信支付
  3. 美国教授北大演讲:并不是每个人都适合做学术
  4. python遍历树结构_python 数据结构与算法——树的遍历
  5. 打印五行五列的直角三角形
  6. matlab 工具函数(一) —— 添加指定 SNR 的噪声
  7. 五、隐函数微分法和逆函数导数 六、指数与对数函数导数、对数微分法 七、第一次考试复习
  8. 一个大一学生学习C语言的心得
  9. 动手学深度学习(第六章 循环神经网络)
  10. PTA实验4-1-3 找出最小值 (20分) 本题要求编写程序,找出给定一系列整数中的最小值。
  11. D3.js用动画渲染数据集的显示
  12. 【华为机试029】合唱队
  13. c++中关于设置左对齐和右对齐的问题解决方法
  14. kedacom摄像头怎么预置_科达KEDACOM TrueVixon100视频会议摄像头
  15. linux看剩余电量命令,Linux终端如何检查笔记本电脑电池的状态和电量
  16. 单片机:数字式时钟—日历
  17. 大象又要跳舞了,中国移动的用户再度加速增长
  18. Solidworks图标出现启动不了的情况怎么办
  19. 编译release版本签名系统
  20. 在少儿编程中使用easygui(5):ynbox/boolbox/ccbox

热门文章

  1. How to resolve empty table CRMATAB issue in ERP gt_crmtab[]
  2. SAP Spartacus organization unit里org list的focus实现问题
  3. SAP Hybris backoffice登录时的语言选择
  4. wiki的watch设置
  5. 在TCP客户端连接成功的回调函数里,无法访问到客户端套接字的明细
  6. oracle时间类型转化成java对象_Oracle数据库date类型与Java中Date的联系与转化
  7. mysql监控sql_关于对mysql语句进行监控的方法详解
  8. 算法学习:最近公共祖先
  9. 最小表达式_C# 09.找最大和最小的数字
  10. oracle 韩思捷_ORACLE数据库技术实用详解:教你如何成为10g OCP