日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java 生成msg文件_java – 如何获取.MSG文件的MIME类型?

發(fā)布時間:2023/12/19 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 生成msg文件_java – 如何获取.MSG文件的MIME类型? 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

我嘗試了一些可能的方法,并使用tika給出您的期望結(jié)果,我沒有看到您使用的代碼,所以我無法仔細(xì)檢查。

我嘗試了不同的方式,并不是所有的代碼片段:

> Java 7 Files.probeContentType(path)

> URLConnection mime檢測從文件名和內(nèi)容類型猜測

> JDK 6 JAF API javax.activation.MimetypesFileTypeMap

> MimeUtil與我發(fā)現(xiàn)的所有可用的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

}

}

使用無擴(kuò)展名的msg文件進(jìn)行測試:

application/vnd.ms-outlook

application/octet-stream

application/octet-stream

用txt文件重新命名為msg進(jìn)行測試:

text/plain

text/plain

application/octet-stream

在這種情況下,似乎最簡單的方式是使用空構(gòu)造函數(shù)是最可靠的。

更新可以使用Apache POI暫存器來制作自己的檢查器,例如,如果文件不正確的格式(通常是org.apache.poi.poifs.filesystem.NotOLE2FileException),這是一個簡單的實(shí)現(xiàn)來獲取消息的MIME,或者為null :無效的標(biāo)題簽名):

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;

}

}

}

總結(jié)

以上是生活随笔為你收集整理的java 生成msg文件_java – 如何获取.MSG文件的MIME类型?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。