我需要檢查MIME類型的currentFile
。如果結果爲成功,並且文件具有MIME類型return true
。如果沒有檢查成功return false
。
有了這個目標,我使用JMimeMagic。
我嘗試這樣做according this post使用JMimeMagic進行MIME類型檢查 - MagicMatchNotFoundException
輸出從這個代碼 - net.sf.jmimemagic.MagicMatchNotFoundException
你需要有JDK 7 - 在這種方式(Files.readAllBytes(path)
)更改文件爲byte []。
代碼:
class ProbeContentTypeCheker implements Checker {
@Override
public boolean check(File currentFile) {
String mimeType = null;
try {
Path path = Paths.get(currentFile.getAbsolutePath());
byte[] data = Files.readAllBytes(path);
MagicMatch match = Magic.getMagicMatch(data);
mimeType = match.getMimeType();
} catch (MagicParseException | MagicMatchNotFoundException
| MagicException | IOException e) {
e.printStackTrace();
}
if (null != mimeType) {
return true;
}
return false;
}
}
輸出(只有當它的 「壞」):
net.sf.jmimemagic.MagicMatchNotFoundException
at net.sf.jmimemagic.Magic.getMagicMatch(Magic.java:222)
at net.sf.jmimemagic.Magic.getMagicMatch(Magic.java:170)
at task.ProbeContentTypeCheker.check(FileScan.java:357)
at task.FolderScan.findFiles(FileScan.java:223)
at task.FolderScan.findFiles(FileScan.java:215)
at task.FolderScan.run(FileScan.java:202)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)
如果文件是 「OK」 型=>輸出到控制檯正常。但一段時間後出現另一個例外:
Exception in thread "pool-1-thread-1" java.lang.OutOfMemoryError: Java heap space
at java.lang.String.toCharArray(String.java:2753)
at org.apache.oro.text.perl.Perl5Util.match(Unknown Source)
at net.sf.jmimemagic.MagicMatcher.testRegex(MagicMatcher.java:663)
at net.sf.jmimemagic.MagicMatcher.testInternal(MagicMatcher.java:433)
at net.sf.jmimemagic.MagicMatcher.test(MagicMatcher.java:341)
at net.sf.jmimemagic.Magic.getMagicMatch(Magic.java:208)
at net.sf.jmimemagic.Magic.getMagicMatch(Magic.java:170)
at task.ProbeContentTypeCheking.check(FileScan.java:384)
at task.FolderScan.findFiles(FileScan.java:228)
at task.FolderScan.findFiles(FileScan.java:225)
at task.FolderScan.findFiles(FileScan.java:225)
at task.FolderScan.run(FileScan.java:209)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)
問:
- 如何解決這個問題出現的異常?
'commons-logging-1.0.4.jar'是否意味着Log4j 1.2.8? – 2013-03-11 11:43:10
不,2個不同的庫 – 2013-03-11 11:52:34
我添加了庫'commons-logging-1.1.1.jar'。輸出到控制檯(紅色):'мар11,2013 2:00:36 PM net.sf.jmimemagic.MagicParser endElement INFO:endElement():不添加無效的匹配器'320 kBits'' ... NoClassDefFoundError :org/apache/oro/text/perl/Perl5Util' – 2013-03-11 12:03:03