我們的應用程序使用Commons VFS來讀取各種類型的文件。我們使用VFS提供的自動文件類型檢測,通過它的file extension mapping。如何配置Commons VFS自動檢測gz文件
問題:VFS將gz文件(即名稱以.gz
結尾的文件)誤分類爲常規文件,而不是GZIP文件。這可以防止我們使用VFS讀取gz文件的(解壓縮的)內容,而不需要特殊的手動破解。
我追蹤的問題org.apache.commons.vfs2.impl.FileContentInfoFilenameFactory.create()
,它調用
FileNameMap fileNameMap = URLConnection.getFileNameMap();
contentType = fileNameMap.getContentTypeFor(name);
這從當前Java安裝加載文件content-types.properties
。該文件(在Windows,至少)包含此映射:
application/octet-stream: \
description=Generic Binary Stream;\
file_extensions=.saveme,.dump,.hqx,.arc,.obj,.lib,.bin,.exe,.zip,.gz
根據源代碼,org.apache.commons.vfs2.impl.FileTypeMap
允許這種映射到優先於與VFS進行配置的文件的擴展名的地圖。
任何人都可以想出一種方法:(a)擴展一個或兩個VFS來解決這個問題;或者(b)配置VFS和/或Java本身,以便VFS正確分類gz文件?