私たちのアプリケーションは、Commons VFSを使用してさまざまな種類のファイルを読み取ります。ファイル拡張子のマッピングを介して、VFS が提供する自動ファイル タイプ検出を使用します。
問題: VFS は、gz ファイル (つまり、名前が で終わる.gz
ファイル) を、GZIP ファイルではなく、通常のファイルとして誤分類します。これにより、VFS を使用して gz ファイルの (解凍された) コンテンツを読み取ることができなくなります。
私は問題を に追跡しましたorg.apache.commons.vfs2.impl.FileContentInfoFilenameFactory.create()
。これは呼び出します
FileNameMap fileNameMap = URLConnection.getFileNameMap();
contentType = fileNameMap.getContentTypeFor(name);
content-types.properties
これにより、現在の Java インストールからファイルがロードされます。このファイル (少なくとも 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 の 1 つまたは 2 つのクラスを拡張する方法、または (b) VFS が gz ファイルを正しく分類するように VFS および/または Java 自体を構成する方法を考えられる人はいますか?