作家
登录

Java获取URL链接的文件类型

作者: 来源: 2012-06-12 13:53:43 阅读 我要评论

在写网络爬虫的时候,需要根据链接来获取文件类型,将内容正确存储。之前我都是根据链接的后缀来判断的,比如:

http://img12.360buyimg.com/da/20120330/88_31_ZySDre.jpg

这个链接指向的文件就是个jpg文件。但是后来发现有诸如

http://jprice.360buyimg.com/getSkuPriceImgService.action?skuId=1850001109&origin=1&webSite=1&type=1的链接,这招就不灵了。后来谷歌百度了一下也没发现解决办法。后来机缘巧合在Java Network Programming上找到了一个办法:

URLConnection class provides two static methods to help programs figure out the MIME type of some data; you can use these if the content type just isn't available or if you have reason to believe that the content type you're given isn't correct。

就是说URLConnection提供了两种方法可以猜测(根据实测结果,这个猜测是相当的准)数据的MIME类型。

第一个是:

  1. public static String guessContentTypeFromName(String name) 

这个方法根据URL文件部分的后缀名来判断类型,跟之前我的方法一样。这个不能解决上面那个问题。

第二个是:

  1. public static String guessContentTypeFromStream(InputStream in)  

这个方法是根据流的前面几个字节来判断类型,这个就不需要文件后缀名了,完全可以解决上面那个问题。

测试代码如下:

  1. BufferedInputStream bis = null;  
  2. HttpURLConnection urlconnection = null;  
  3. URL url = null;          
  4.         url = new URL(strUrl);  
  5.     urlconnection = (HttpURLConnection) url.openConnection();  
  6.     urlconnection.connect();  
  7. bis = new BufferedInputStream(urlconnection.getInputStream());  
  8.     System.out.println("file type:"+HttpURLConnection.guessContentTypeFromStream(bis)); 

原文链接:http://www.cnblogs.com/lisperl/archive/2012/05/21/2511224.html

【编辑推荐】

  1. Java端通过CXF调用.NET端服务
  2. Java protobuf框架使用向导
  3. Java数据结构:栈的实现
  4. Java设计模式之:创建者模式
  5. Java设计模式之:适配器模式

  推荐阅读

  一道多线程题目的解决方案

在iteye上看到的一道多线程的题目,参考了一下网友的实现,那Eclipse调试通过,算是对JAVA5的并发库有个大致的了解,分享出来,欢迎园里的同学拍砖。题目:要求用三个线程,按顺序打印1,2,3,4,5.... 71,72,73,74, 75>>>详细阅读


本文标题:Java获取URL链接的文件类型

地址:http://www.17bianji.com/kaifa2/Java/244.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)