2017-01-02 96 views
0

该接口提供了一种方法,即getContentTypeFor(String fileName)。但是,我不知道如何使用它。我实现的接口在Eclipse和结束了:如何在Java中使用FileNameMap接口?

import java.net.FileNameMap; 

public class Fnam implements FileNameMap { 

public static void main(String[] args) { 

} 

@Override 
public String getContentTypeFor(String fileName) { 
    return null; 
} 
} 

该方法返回null。我应该如何改变它以获得MIME类型?

+0

它是如何重复的?我的问题涉及FileNameMap接口的用法,一般不会获取Mime类型的文件 – kjdkfjsdo8

回答

0

它是JDK内部实现的接口,在大多数情况下,您应该只使用接口实现,而不是接口本身。

这里使用简单的例子:

public class Main { 
    private static FileNameMap fileNameMap = URLConnection.getFileNameMap(); 

    public static void main(String... str) { 
     System.out.print(fileNameMap.getContentTypeFor("my_file.xml")); 
    } 

} 

打印:

application/xml 

而且seems只有MimeTable是目前唯一实现在JDK该接口。

0

FileNameMap是一个理解文件类型的类的方法返回的接口。例如,有一个具有getFileNameMap()方法的URLConnection类,它的使用方式如下所示。

private void requestIntent(Uri uri) { 
    Intent intent = new Intent(Intent.ACTION_VIEW); 
    FileNameMap mime = URLConnection.getFileNameMap(); 
    String mimeType = mime.getContentTypeFor(uri.getPath()); 
    intent.setDataAndType(uri, mimeType); 
    try { 
     mActivity.startActivity(intent); 
    } catch (ActivityNotFoundException e) { 
     Toast.makeText(mActivity, OResource.string(mActivity, R.string.toast_no_activity_found_to_handle_file), Toast.LENGTH_LONG).show(); 
    } 
} 

这个例子从here

所以,你通常不会孤立地使用FileNameMap。相反,您可以使用创建实现FileNameMap的对象的现有库类。如果你确实想实现这样的库,你需要写这样的代码(从URLConnection的来源获取)

public static synchronized FileNameMap More getFileNameMap() { 
316   if ((fileNameMap == null) && !fileNameMapLoaded) { 
317    fileNameMap = sun.net.www.MimeTable.loadTable(); 
318    fileNameMapLoaded = true; 
319   } 
320 
321   return new FileNameMap() { 
322    private FileNameMap map = fileNameMap; 
323    public String getContentTypeFor(String fileName) { 
324     return map.getContentTypeFor(fileName); 
325    } 
326   }; 
327  } 

在这里您将看到实现创建一个匿名类实现该接口;你作为接口实现者的责任将是设法实现getContentTypeFor()方法。

如果你想要做的就是一个文件的MIME类型,那么你可以使用URLConnection的给你一个已经具有实施的对象,因此就使用在回答所示的方法来related question

+0

第一个示例涉及Android而不是普通的Java,第二个示例在尝试运行时遇到了一些问题 – kjdkfjsdo8