用Java实现获取文件类型的方法。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用Java实现获取文件类型的方法。相关的知识,希望对你有一定的参考价值。

获取文件类型,可以理解为获取文件的扩展名。但是因为会存在某文件不具有扩展名,或者伪造扩展名等情况。不知道如何处理。请大侠赐教 ,感激不尽!!!

主要以下几种方法:

这个MimetypesFileMap类会映射出一个file的Mime Type,这些Mime Type类型是在activation.jar包里面的资源文件中定义的 

import javax.activation.MimetypesFileTypeMap;  
import java.io.File;  
  
class GetMimeType   
  public static void main(String args[])   
    File f = new File("test.gif");  
    System.out.println("Mime Type of " + f.getName() + " is " +  
                         new MimetypesFileTypeMap().getContentType(f));  
    // expected output :  
    // "Mime Type of test.gif is image/gif"  
    

使用 java.net.URL 
警告:这个方法非常慢 
与上面所说的匹配后缀名类似。后缀名和mime-type的映射关系被定义在[jre_home]\\lib\\content-types.properties这个文件中 

import java.net.*;  
  
public class FileUtils  
  public static String getMimeType(String fileUrl)  
    throws java.io.IOException, MalformedURLException  
    
    String type = null;  
    URL u = new URL(fileUrl);  
    URLConnection uc = null;  
    uc = u.openConnection();  
    type = uc.getContentType();  
    return type;  
    
  
  public static void main(String args[]) throws Exception   
    System.out.println(FileUtils.getMimeType("file://c:/temp/test.TXT"));  
    // output :  text/plain  
    

还有一种方式:就是取文件名最后一个“.”后的内容,通过人来判断如

String fileName = "aaa.txt";

String fileType =“txt”//通过方法取出方法类型为

String type = "";

if( fileTyep.equals("txt"))

    type  = "记事本";

else if(fileTyep.equals("img"))

    type  = "img图片";

。。。。。

参考技术A 肯定是要用后缀名来判断的,你用正则表达式去判断文件名就可以了。很简单 参考技术B is = new BufferedInputStream(new FileInputStream(fileName));
String mimeType = URLConnection.guessContentTypeFromStream(is);
if(mimeType == null)
throw new IOException("can\'t get mime type of image");

追问

看起来这样确实可以取到文件扩展名,不过这种情况是不是表示需要读取文件,来获得文件头的信息,所以会不会影响性能呢。目前的业务是大量文件实时传过来,去判断类型。

本回答被提问者和网友采纳
参考技术C 我这里有个工具类,就是太大了。没法贴出来。呵呵

JAVA实现ZIP文件下载,下载时获取不了文件名,只能用固定的文件名代替,而且获取不了下载的文件类型?

如果用文件自身的文件名,下载时文件名变为“download”,而且没有后缀,要手动改为.zip,而用固定的文件名“Template.zip”则可以拿到.zip文件
自己解决了,加上new String( fileName.getBytes("gb2312"), "ISO8859-1" )+".zip"就搞定了,原来是header的长度限制问题。。。。。

参考技术A 你要去看一下你的filename取值是什么,应该是你的filename取值就是download追问

filename是从数据库里面获取的,我调试过,是可以拿到真实的文件名。还有,在这里,我用filename+“.zip”,但是下载时也获取不了文件后缀,用"Teamplate.zip"又可以,这里不就是简单的字符拼接而已吗,难道还有什么玄机?

追答

你可以输出一下你拼接的文件名称,看一下是什么,从数据库取出的,有没有考虑数据库编码方式?

以上是关于用Java实现获取文件类型的方法。的主要内容,如果未能解决你的问题,请参考以下文章

Java web文件上传怎么限制文件类型

java中判断上传文件类型

java 传输 获取文件类型

http如何实现同时发送文件和报文(用java实现)

php实现获取文件mime类型的方法

java 中如何检测已经实现了接口?