此接口提供一种方法,即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类型?
答案 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中该接口的当前实现。