- すべての実装されたインタフェース:
Closeable
,AutoCloseable
public class JarFile extends ZipFile
JarFile
クラスは、java.io.RandomAccessFile
で開くことができる任意のファイルからjarファイルの内容を読み取るために使います。 java.util.zip.ZipFile
クラスを拡張し、オプションのManifest
エントリの読み取りをサポートし、マルチ・リリースjarファイルの処理をサポートします。 Manifest
エントリは、jarファイルとそのエントリのメタ情報を指定するために使います。
「マルチ・リリースjarファイル」は、"Multi-Release"という名前のメイン属性を持つマニフェストを含むjarファイルです。"base"エントリのセットは、jarファイルのパブリック・インタフェースを構成するpublicまたはprotectedメソッドを含むパブリック・クラスであり、"versioned"エントリのセットが含まれています"META-INF/versions"ディレクトリのサブディレクトリにあります。 バージョン管理されたエントリは、Javaプラットフォームのメジャー・バージョンによってパーティション化されます。 バージョンn
、8 < n
を"META-INF/versions/{n}"ディレクトリに持つバージョニング済みエントリは、ベース・エントリおよびバージョン番号i
(8 < i < n
)を持つエントリをオーバーライドします。
デフォルトでは、マルチ・リリースjarファイルのJarFile
は、マルチ・リリースjarファイルを単純な(unversioned) jarファイルであるかのように処理するように構成されているため、エントリ名は最大でも1つのベース・エントリに関連付けられています。 JarFile
は、JarFile
をJarFile(File, boolean, int, Runtime.Version)
コンストラクタとともに作成することによって、マルチ・リリースjarファイルを処理するように構成できます。 Runtime.Version
オブジェクトは、バージョニングされたエントリを検索するときに使用される最大バージョンを設定します。 このように構成すると、エントリ名は最大でも1つの基本エントリと0個以上のバージョン管理されたエントリに対応できます。 エントリ名を、バージョンが最大バージョン(getEntry(String)
を参照してください)以下の最新のバージョン管理されたエントリに関連付ける検索が必要です。
JarFile
を利用してJarFile
エントリの内容からクラスをロードするクラス・ローダーは、最後の引数に割り当てられた値Runtime.version()
を使用してJarFile(File, boolean, int, Runtime.Version)
コンストラクタを呼び出すことによって、JarFile
を構築する必要があります。 これにより、実行中のJVMのメジャー・バージョンと互換性のあるクラスがマルチ・リリースJARファイルからロードされるようになります。
シグネチャ付きjarファイル・ファイルを開くときにverify
フラグがオンになっている場合、そのjarエントリの内容は、path name
に関連付けられているマニフェスト内に埋め込まれたシグネチャに対して検証されます。 複数文字のjarファイルの場合、バージョニングされたエントリの内容はそのシグネチャに対してverfieidとなり、JarEntry.getCodeSigners()
は独自のシグネチャ者を戻します。 検証プロセスには、署名者の証明書の検証は含まれていないことに注意してください。 呼出し側で、JarEntry.getCodeSigners()
の戻り値を検査し、署名が信頼できるかどうかをさらに判断してください。
ほかで指定がない場合、null
引数をコンストラクタまたはこのクラスのメソッドへ渡すと、NullPointerException
がスローされます。
- 実装上の注意:
- APIを使用して
JarFile
(例えば、コンパイルされたアプリケーションやライブラリの構成を上書きします)を構成できない場合は、2つのSystem
プロパティを使用できます。-
jdk.util.jar.version
には、負でない整数<= Runtime.version().feature()
のString
表現である値を割り当てることができます。 この値は、実効ランタイム・バージョンをRuntime.version().feature()
を評価することによって得られたデフォルト値以外の値に設定するために使用されます。 実効ランタイム・バージョンは、最後の引数の値がJarFile.runtimeVersion()
のときにJarFile(File, boolean, int, Runtime.Version)
コンストラクタが使用するバージョンです。 -
jdk.util.jar.enableMultiRelease
には、3つのString
値true、false、またはforceのいずれかを割り当てることができます。 値true(デフォルト値)は、マルチ・リリースjarファイル処理を有効にします。 値falseは、"Multi-Release"マニフェスト属性を無視して、マルチ・リリースjar処理を無効にします。存在する場合は、マルチ・リリースjarファイルのバージョン管理されたディレクトリを無視します。 さらに、メソッドisMultiRelease()
はfalseを返します。 値forceにより、JarFile
は構築後にランタイム・バージョン管理に初期化されます。 これはこのコードと事実上同じです:(new JarFile(File, boolean, int, JarFile.runtimeVersion())
。
-
- 導入されたバージョン:
- 1.2
- 関連項目:
Manifest
,ZipFile
,JarEntry
-
フィールドのサマリー
フィールド 修飾子と型 フィールド 説明 static int
CENATT
static int
CENATX
static int
CENCOM
static int
CENCRC
static int
CENDSK
static int
CENEXT
static int
CENFLG
static int
CENHDR
static int
CENHOW
static int
CENLEN
static int
CENNAM
static int
CENOFF
static long
CENSIG
static int
CENSIZ
static int
CENTIM
static int
CENVEM
static int
CENVER
static int
ENDCOM
static int
ENDHDR
static int
ENDOFF
static long
ENDSIG
static int
ENDSIZ
static int
ENDSUB
static int
ENDTOT
static int
EXTCRC
static int
EXTHDR
static int
EXTLEN
static long
EXTSIG
static int
EXTSIZ
static int
LOCCRC
static int
LOCEXT
static int
LOCFLG
static int
LOCHDR
static int
LOCHOW
static int
LOCLEN
static int
LOCNAM
static long
LOCSIG
static int
LOCSIZ
static int
LOCTIM
static int
LOCVER
static String
MANIFEST_NAME
JARマニフェスト・ファイルの名前です。 -
コンストラクタのサマリー
コンストラクタ コンストラクタ 説明 JarFile(File file)
指定されたFile
オブジェクトから読み込む新しいJarFile
を作成します。JarFile(File file, boolean verify)
指定されたFile
オブジェクトから読み込む新しいJarFile
を作成します。JarFile(File file, boolean verify, int mode)
指定されたモードで指定のFile
オブジェクトから読み込む新しいJarFile
を作成します。JarFile(File file, boolean verify, int mode, Runtime.Version version)
指定されたモードで指定のFile
オブジェクトから読み込む新しいJarFile
を作成します。JarFile(String name)
指定されたファイルname
から読み込む新しいJarFile
を作成します。JarFile(String name, boolean verify)
指定されたファイルname
から読み込む新しいJarFile
を作成します。 -
メソッドのサマリー
修飾子と型 メソッド 説明 static Runtime.Version
baseVersion()
マルチ・リリースjarファイルのバージョン管理されていない構成を表すバージョンを返します。Enumeration<JarEntry>
entries()
jarファイル・エントリの列挙型を返します。ZipEntry
getEntry(String name)
指定された基本エントリ名のZipEntry
を返します。見つからなければnull
を返します。InputStream
getInputStream(ZipEntry ze)
指定されたZIPファイル・エントリの内容を読み込む入力ストリームを返します。JarEntry
getJarEntry(String name)
指定された基本エントリ名のJarEntry
を返します。見つからなければnull
を返します。Manifest
getManifest()
jarファイルのマニフェストを返します。マニフェストがない場合はnull
を返します。Runtime.Version
getVersion()
バージョン管理されたエントリを検索するときに使用される最大バージョンを返します。boolean
isMultiRelease()
このjarファイルがマルチ・リリースjarファイルであるかどうかを示します。static Runtime.Version
runtimeVersion()
マルチ・リリースjarファイルの有効なランタイム・バージョン構成を表すバージョンを返します。Stream<JarEntry>
stream()
jarファイル・エントリ上に順序付けされたStream
を返します。Stream<JarEntry>
versionedStream()
バージョン管理されたjarファイル・エントリのStream
を返します。
-
フィールド詳細
-
MANIFEST_NAME
public static final String MANIFEST_NAMEJARマニフェスト・ファイルの名前です。- 関連項目:
- 定数フィールド値
-
LOCSIG
public static final long LOCSIG- 関連項目:
- 定数フィールド値
-
EXTSIG
public static final long EXTSIG- 関連項目:
- 定数フィールド値
-
CENSIG
public static final long CENSIG- 関連項目:
- 定数フィールド値
-
ENDSIG
public static final long ENDSIG- 関連項目:
- 定数フィールド値
-
LOCHDR
public static final int LOCHDR- 関連項目:
- 定数フィールド値
-
EXTHDR
public static final int EXTHDR- 関連項目:
- 定数フィールド値
-
CENHDR
public static final int CENHDR- 関連項目:
- 定数フィールド値
-
ENDHDR
public static final int ENDHDR- 関連項目:
- 定数フィールド値
-
LOCVER
public static final int LOCVER- 関連項目:
- 定数フィールド値
-
LOCFLG
public static final int LOCFLG- 関連項目:
- 定数フィールド値
-
LOCHOW
public static final int LOCHOW- 関連項目:
- 定数フィールド値
-
LOCTIM
public static final int LOCTIM- 関連項目:
- 定数フィールド値
-
LOCCRC
public static final int LOCCRC- 関連項目:
- 定数フィールド値
-
LOCSIZ
public static final int LOCSIZ- 関連項目:
- 定数フィールド値
-
LOCLEN
public static final int LOCLEN- 関連項目:
- 定数フィールド値
-
LOCNAM
public static final int LOCNAM- 関連項目:
- 定数フィールド値
-
LOCEXT
public static final int LOCEXT- 関連項目:
- 定数フィールド値
-
EXTCRC
public static final int EXTCRC- 関連項目:
- 定数フィールド値
-
EXTSIZ
public static final int EXTSIZ- 関連項目:
- 定数フィールド値
-
EXTLEN
public static final int EXTLEN- 関連項目:
- 定数フィールド値
-
CENVEM
public static final int CENVEM- 関連項目:
- 定数フィールド値
-
CENVER
public static final int CENVER- 関連項目:
- 定数フィールド値
-
CENFLG
public static final int CENFLG- 関連項目:
- 定数フィールド値
-
CENHOW
public static final int CENHOW- 関連項目:
- 定数フィールド値
-
CENTIM
public static final int CENTIM- 関連項目:
- 定数フィールド値
-
CENCRC
public static final int CENCRC- 関連項目:
- 定数フィールド値
-
CENSIZ
public static final int CENSIZ- 関連項目:
- 定数フィールド値
-
CENLEN
public static final int CENLEN- 関連項目:
- 定数フィールド値
-
CENNAM
public static final int CENNAM- 関連項目:
- 定数フィールド値
-
CENEXT
public static final int CENEXT- 関連項目:
- 定数フィールド値
-
CENCOM
public static final int CENCOM- 関連項目:
- 定数フィールド値
-
CENDSK
public static final int CENDSK- 関連項目:
- 定数フィールド値
-
CENATT
public static final int CENATT- 関連項目:
- 定数フィールド値
-
CENATX
public static final int CENATX- 関連項目:
- 定数フィールド値
-
CENOFF
public static final int CENOFF- 関連項目:
- 定数フィールド値
-
ENDSUB
public static final int ENDSUB- 関連項目:
- 定数フィールド値
-
ENDTOT
public static final int ENDTOT- 関連項目:
- 定数フィールド値
-
ENDSIZ
public static final int ENDSIZ- 関連項目:
- 定数フィールド値
-
ENDOFF
public static final int ENDOFF- 関連項目:
- 定数フィールド値
-
ENDCOM
public static final int ENDCOM- 関連項目:
- 定数フィールド値
-
-
コンストラクタの詳細
-
JarFile
public JarFile(String name) throws IOException指定されたファイルname
から読み込む新しいJarFile
を作成します。JarFile
が署名されているかどうかが確認されます。- パラメータ:
name
- 読込みのために開くjarファイルの名前- 例外:
IOException
- 入出力エラーが発生した場合SecurityException
- ファイルへのアクセスがSecurityManagerによって拒否された場合
-
JarFile
public JarFile(String name, boolean verify) throws IOException指定されたファイルname
から読み込む新しいJarFile
を作成します。- パラメータ:
name
- 読込みのために開くjarファイルの名前verify
- jarファイルが署名されていることを確認するかどうか。- 例外:
IOException
- 入出力エラーが発生した場合SecurityException
- ファイルへのアクセスがSecurityManagerによって拒否された場合
-
JarFile
public JarFile(File file) throws IOException指定されたFile
オブジェクトから読み込む新しいJarFile
を作成します。JarFile
が署名されているかどうかが確認されます。- パラメータ:
file
- 読込みのために開かれるjarファイル- 例外:
IOException
- 入出力エラーが発生した場合SecurityException
- ファイルへのアクセスがSecurityManagerによって拒否された場合
-
JarFile
public JarFile(File file, boolean verify) throws IOException指定されたFile
オブジェクトから読み込む新しいJarFile
を作成します。- パラメータ:
file
- 読込みのために開かれるjarファイルverify
- jarファイルが署名されていることを確認するかどうか。- 例外:
IOException
- 入出力エラーが発生した場合SecurityException
- ファイルへのアクセスがSecurityManagerによって拒否された場合。
-
JarFile
public JarFile(File file, boolean verify, int mode) throws IOException指定されたモードで指定のFile
オブジェクトから読み込む新しいJarFile
を作成します。 モード引数は、OPEN_READ
またはOPEN_READ|OPEN_DELETE
である必要があります。- パラメータ:
file
- 読込みのために開かれるjarファイルverify
- jarファイルが署名されていることを確認するかどうか。mode
- ファイルが開かれるモード- 例外:
IOException
- 入出力エラーが発生した場合IllegalArgumentException
-mode
引数が無効な場合SecurityException
- ファイルへのアクセスがSecurityManagerによって拒否された場合- 導入されたバージョン:
- 1.3
-
JarFile
public JarFile(File file, boolean verify, int mode, Runtime.Version version) throws IOException指定されたモードで指定のFile
オブジェクトから読み込む新しいJarFile
を作成します。 モード引数は、OPEN_READ
またはOPEN_READ|OPEN_DELETE
である必要があります。 正規表現に変換された後のversion引数は、マルチ・リリースjarファイルを処理するためのJarFile
の構成に使用されます。バージョン・パラメータから得られる標準形式は、
Runtime.Version.parse(Integer.toString(n))
であり、ここで、n
はMath.max(version.feature(), JarFile.baseVersion().feature())
です。- パラメータ:
file
- 読込みのために開かれるjarファイルverify
- jarファイルが署名されていることを確認するかどうか。mode
- ファイルが開かれるモードversion
- マルチ・リリースjarファイルのリリース・バージョンを指定- 例外:
IOException
- 入出力エラーが発生した場合IllegalArgumentException
-mode
引数が無効な場合SecurityException
- ファイルへのアクセスがSecurityManagerによって拒否された場合NullPointerException
-version
がnull
の場合- 導入されたバージョン:
- 9
-
-
メソッドの詳細
-
baseVersion
public static Runtime.Version baseVersion()マルチ・リリースjarファイルのバージョン管理されていない構成を表すバージョンを返します。- 戻り値:
- バージョン管理されていない構成を表すバージョン
- 導入されたバージョン:
- 9
-
runtimeVersion
public static Runtime.Version runtimeVersion()マルチ・リリースjarファイルの有効なランタイム・バージョン構成を表すバージョンを返します。デフォルトでは、返される
Version
の機能バージョン番号は、Runtime.version()
の機能バージョン番号と等しくなります。 ただし、jdk.util.jar.version
プロパティが設定されている場合、返されるVersion
はそのプロパティから派生し、機能のバージョン番号は等しくない場合があります。- 戻り値:
- ランタイム・バージョン管理された構成を表すバージョン
- 導入されたバージョン:
- 9
-
getVersion
public final Runtime.Version getVersion()バージョン管理されたエントリを検索するときに使用される最大バージョンを返します。この
JarFile
がマルチ・リリースjarファイルではない、またはそのように処理されるように構成されていない場合、返されるバージョンはbaseVersion()
から返されるバージョンと同じになります。- 戻り値:
- 最大バージョン
- 導入されたバージョン:
- 9
-
isMultiRelease
public final boolean isMultiRelease()このjarファイルがマルチ・リリースjarファイルであるかどうかを示します。- 戻り値:
- このJarFileが複数リリースのjarファイルの場合はtrue
- 導入されたバージョン:
- 9
-
getManifest
public Manifest getManifest() throws IOExceptionjarファイルのマニフェストを返します。マニフェストがない場合はnull
を返します。- 戻り値:
- jarファイルのマニフェスト。マニフェストがない場合は
null
- 例外:
IllegalStateException
- jarファイルが閉じられている場合に、スローされることがあるIOException
- 入出力エラーが発生した場合
-
getJarEntry
指定された基本エントリ名のJarEntry
を返します。見つからなければnull
を返します。この
JarFile
がマルチ・リリースjarファイルであり、そのように処理されるように構成されている場合、指定されたエントリ名に関連付けられた最新のバージョン化されたエントリであるJarEntry
を検索して返します。 返されるJarEntry
は、エントリが存在するn
の最大値に対して、文字列"META-INF/versions/{n}/"
でプレフィクス付けられた特定の基本エントリ名に対応するバージョン付きエントリです。 そのようなバージョン管理されたエントリが存在しない場合、基本エントリのJarEntry
が返されます。そうでない場合は、エントリが見つからない場合はnull
が返されます。 バージョンn
の初期値は、メソッドgetVersion()
によって返される最大バージョンです。- 実装要件:
- この実装は
getEntry(String)
を呼び出します。 - パラメータ:
name
- jarファイルのエントリ名- 戻り値:
- 指定されたエントリ名の
JarEntry
、またはバージョン管理されたエントリ名、見つからなければnull
- 例外:
IllegalStateException
- jarファイルが閉じられている場合に、スローされることがある- 関連項目:
JarEntry
-
getEntry
指定された基本エントリ名のZipEntry
を返します。見つからなければnull
を返します。この
JarFile
がマルチ・リリースjarファイルであり、そのように処理されるように構成されている場合、指定されたエントリ名に関連付けられた最新のバージョン化されたエントリであるZipEntry
を検索して返します。 返されるZipEntry
は、エントリが存在するn
の最大値に対して、文字列"META-INF/versions/{n}/"
でプレフィクス付けられた特定の基本エントリ名に対応するバージョン付きエントリです。 そのようなバージョン管理されたエントリが存在しない場合、基本エントリのZipEntry
が返されます。そうでない場合は、エントリが見つからない場合はnull
が返されます。 バージョンn
の初期値は、メソッドgetVersion()
によって返される最大バージョンです。- オーバーライド:
getEntry
、クラス:ZipFile
- 実装要件:
- この実装は、対応する基本エントリがない場合でも、リクエストされた名前のバージョン付きエントリを返す可能性があります。 これは、一致するプライベートまたはパッケージ・プライベートのバージョニングされたエントリがある場合に発生します。 サブクラスがこのメソッドをオーバーライドする場合は、オーバーライド・メソッドが
super.getEntry(name)
を呼び出してバージョン化されたすべてのエントリを取得するようにします。 - パラメータ:
name
- jarファイルのエントリ名- 戻り値:
- 指定されたエントリ名またはバージョン化されたエントリ名の
ZipEntry
、または見つからなければnull
- 例外:
IllegalStateException
- jarファイルが閉じられている場合に、スローされることがある- 関連項目:
ZipEntry
-
entries
public Enumeration<JarEntry> entries()jarファイル・エントリの列挙型を返します。- オーバーライド:
entries
、クラス:ZipFile
- 戻り値:
- jarファイル・エントリの列挙型
- 例外:
IllegalStateException
- jarファイルが閉じられている場合に、スローされることがある
-
stream
jarファイル・エントリ上に順序付けされたStream
を返します。 エントリは、Stream
に、jarファイルの中央ディレクトリに表示される順序で表示されます。- オーバーライド:
- クラス
ZipFile
のstream
- 戻り値:
- このjarファイル内のエントリの順序付けられた
Stream
- 例外:
IllegalStateException
- jarファイルが閉じられている場合- 導入されたバージョン:
- 1.8
-
versionedStream
バージョン管理されたjarファイル・エントリのStream
を返します。この
JarFile
がマルチ・リリースjarファイルであり、そのように処理されるように構成されている場合、ストリーム内のエントリは、対応するベース・エントリ名に関連付けられた最新バージョン・エントリです。 バージョン管理された最新のエントリの最大バージョンは、getVersion()
によって返されたバージョンです。 返されるストリームには、バージョニングされたエントリとしてのみ存在するエントリが含まれる場合があります。 jarファイルがマルチ・リリースjarファイルでない場合、またはJarFile
がマルチ・リリースjarファイルの処理用に構成されていない場合、このメソッドはstream()
が返すストリームと同じストリームを返します。- 戻り値:
- バージョン管理されたエントリのストリーム
- 導入されたバージョン:
- 10
-
getInputStream
public InputStream getInputStream(ZipEntry ze) throws IOException指定されたZIPファイル・エントリの内容を読み込む入力ストリームを返します。- オーバーライド:
getInputStream
、クラス:ZipFile
- パラメータ:
ze
- ZIPファイル・エントリ- 戻り値:
- 指定されたzipファイル・エントリの内容を読み取るための、入力ストリーム
- 例外:
ZipException
- zipファイル形式エラーが発生した場合IOException
- 入出力エラーが発生した場合SecurityException
- jarファイル・エントリが誤って署名された場合。IllegalStateException
- jarファイルが閉じられている場合に、スローされることがある
-