当前位置: 首页 > 工具软件 > jMimeMagic > 使用案例 >

magicmatch java_java – 使用JMimeMagic进行MIME类型检查 – MagicMatchNotFoundException

刘英彦
2023-12-01

我需要检查MIME类型的currentFile.如果结果是成功并且文件具有MIME类型返回true.如果没有检查成功则返回false.

有了这个目标,我使用

JMimeMagic.

我尝试这样做

according this post

此代码的输出是 – net.sf.jmimemagic.MagicMatchNotFoundException

您需要JDK 7 – 以这种方式将File更改为byte [](Files.readAllBytes(path)).

码:

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)

题:

>如何解决这种异常问题?

 类似资料: