2017-01-02 33 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