這個答案How can I determine if a file is a PDF file?建議下載另一個庫,但我的要求是,我只需要檢查文件是否是目錄式PDF的或不如何知道文件類型是否爲PDF?
使用完整的圖書館這種用途看起來像矯枉過正
- 有什麼方法可以知道Java文件是PDF類型的嗎?
2
A
回答
11
0
1
嗯,善良的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);
}
}
1
如果檢查的文件擴展名是不盡如人意,你coudl通過讀取文件的幾個字節嘗試檢查文件magic number
PDF files start with "%PDF" (hex 25 50 44 46).
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);
}
1
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());
}
相關問題
- 1. 如何使用itext知道文檔是否聲明爲PDF/A
- 2. 如何知道我的pdf文件加載是否合適
- 3. 如何知道文件類型?
- 4. 是否可以知道上傳文件的類型是否爲圖像?
- 5. 如何知道類型是否繼承了其他類型?
- 6. 如何知道文件是否存在?
- 7. 如何知道PropertyInfo是否爲ICollect <>類型 - Reflection和GenericType
- 8. 如何知道文件是否爲文本渲染? (Java)
- 9. 如何知道模型是否可行
- 10. 如何知道類型參數是否是動態的?
- 11. 如何知道上傳的文件是否爲圖像
- 12. 如何知道JCalendar是否爲空?
- 13. 如何知道表是否爲空?
- 14. 如何知道SingleSelectionModel.getSelectedObject()是否爲NULL?
- 15. 如何知道List.remove()是否爲「Unsupported」?
- 16. 知道文件夾是否具有指定文件類型的最佳方法
- 17. MSVC - 我如何知道一個類型是否必須移動?
- 18. 如何知道文本是否有效
- 19. 如何知道是否
- 20. 如何知道服務器是否接受特定類型的內容類型?
- 21. NSURLRequest知道URL類型如果它是文件或鏈接
- 22. 核心文本 - 如何知道文本是否爲右至左
- 23. C#數據集:如何知道列是否爲DateTime /布爾類型
- 24. HSSF POI:如何知道單元格中的數據是否爲類型日期?
- 25. 如何知道agument是否是Java中的目錄或文件
- 26. 如何知道文件名是否是Android中的別名?
- 27. 如何知道某個類是否映射爲Hibernate實體?
- 28. 知道是否EditText爲空
- 29. C#如何知道文字是什麼類型?
- 30. 我們如何知道類型類是否是另一個類型類的子類?
爲什麼你不希望使用圖書館?這是什麼用例?查看擴展通常不是一個好主意,因爲任何人和任何其他程序都可以更改擴展。不看文件就很難確定它是否真的是PDF。爲此,我建議你使用一個庫。 – peshkira
相關/重複:http://stackoverflow.com/questions/1915317/howto-extract-mimetype-from-a-byte –
嘗試看看http://stackoverflow.com/questions/51438/gettinga-a- files-mime-type-in-java – MadProgrammer