如何在Java中使用FileNameMap接口?

时间:2017-01-02 08:44:15

标签: java interface

此接口提供一种方法,即getContentTypeFor(String fileName)。但是,我不知道如何使用它。我在Eclipse中实现了接口,最后用:

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类型?

2 个答案:

答案 0 :(得分:0)

FileNameMap是由理解文件类型的类的方法返回的接口。例如,有一个URLConnection类,它有一个getFileNameMap()方法,就像这样使用。

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答案中显示的方法即可。

答案 1 :(得分: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中该接口的当前实现。