java 生成msg文件_java – 如何获取.MSG文件的MIME类型?
我嘗試了一些可能的方法,并使用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),這是一個(gè)簡單的實(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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java刘保_[SSH] Eclipse
- 下一篇: Linux内核中的常用宏containe