这个答案How can I determine if a file is a PDF file?建议下载另一个库,但我的要求是我只需要检查文件目录是否为PDF格式
使用完整的库看起来像overkill
答案 0 :(得分:12)
嗯,根据wikipedia PDF文件以幻数开头:"%PDF" (hex 25 50 44 46)
所以也许你应该检查文件中的InputStream并检查它。
答案 1 :(得分:3)
SimpleMagic是用于解析内容类型的Java库:
<!-- pom.xml -->
<dependency>
<groupId>com.j256.simplemagic</groupId>
<artifactId>simplemagic</artifactId>
<version>1.8</version>
</dependency>
import com.j256.simplemagic.ContentInfo;
import com.j256.simplemagic.ContentInfoUtil;
import com.j256.simplemagic.ContentType;
// ...
public class SimpleMagicSmokeTest {
private final static Logger log = LoggerFactory.getLogger(SimpleMagicSmokeTest.class);
@Test
public void smokeTestSimpleMagic() throws IOException {
ContentInfoUtil util = new ContentInfoUtil();
File possiblePdfFile = new File("/path/to/possiblePdfFile.pdf");
ContentInfo info = util.findMatch(possiblePdfFile);
log.info( info.toString() );
assertEquals( ContentType.PDF, info.getContentType() );
}
答案 2 :(得分:2)
好吧,一种hackish解决方案是查看完整的文件名,看看它是否以“.pdf”结尾。以下内容应该有所帮助:
import javax.activation.*;
public class ShowMimeType
{
public static void main(String[] args) {
FileDataSource ds = new FileDataSource(args[0]);
String contentType = ds.getContentType();
System.out.println("The MIME type of the file " + args[0] + " is: " + contentType);
}
}
答案 3 :(得分:1)
如果检查文件扩展名不满意,您可以尝试通过读取文件的几个字节来检查文件magic number
PDF files start with "%PDF" (hex 25 50 44 46).
答案 4 :(得分:0)
这听起来有点太明显了,但检查文件名的扩展名。
如果它对于资源管理器来说已经足够好了,那么对你来说应该足够了
答案 5 :(得分:0)
组合较轻的URLCOnnection.guessContentTypeFromStream(),它为某些mimeTypes返回null,使用较重的AutoDetectParser。
if(currentImageType ==null){
ByteArrayInputStream is = new ByteArrayInputStream(image);
String mimeType = URLConnection.guessContentTypeFromStream(is);
if(mimeType == null){
AutoDetectParser parser = new AutoDetectParser();
Detector detector = parser.getDetector();
Metadata md = new Metadata();
mimeType = detector.detect(is,md).toString();
if (mimeType.contains("pdf")){
mimeType ="pdf";
}
else if(mimeType.contains("tif")||mimeType.contains("tiff")){
mimeType = "tif";
}
}
if(mimeType.contains("png")){
mimeType ="png";
}
else if( mimeType.contains("jpg")||mimeType.contains("jpeg")){
mimeType = "jpg";
}
else if (mimeType.contains("pdf")){
mimeType ="pdf";
}
else if(mimeType.contains("tif")||mimeType.contains("tiff")){
mimeType = "tif";
}
currentImageType = ImageType.fromValue(mimeType);
}
答案 6 :(得分:0)
尝试下面的代码,并且可以正常工作。
public static boolean isSelectedFilePdf(Uri uri, ContentResolver contentResolver) {
if (uri != null) {
if (uri.getScheme().equals("content")) {
String type = contentResolver.getType(uri);
return type != null && type.startsWith("application/pdf");
} else {
String fileName = uri.getLastPathSegment();
String extension = fileName.substring(fileName.lastIndexOf("."));
return extension != null && extension.equalsIgnoreCase(".pdf");
}
}
}
答案 7 :(得分:0)
Check whether a PDF-File is valid (Python)
中提到了以下解决方案在我的项目中,我需要检查某些上传文件的mime类型。我只是像这样使用file命令:
from subprocess import Popen, PIPE
filetype = Popen("/usr/bin/file -b --mime -", shell=True, stdout=PIPE, stdin=PIPE).communicate(file.read(1024))[0].strip()
您当然可能希望将实际命令移到某些配置文件中,因为命令行选项在不同的操作系统(例如mac)之间也有所不同。
如果您只需要知道它是否是PDF,而又不需要处理它,我认为file命令是比lib更快的解决方案。当然也可以手动执行此操作,但是如果要检查其他类型,file命令可以为您提供更大的灵活性。