モジュール java.base
パッケージ java.util.jar

クラスJarFile

  • すべての実装されたインタフェース:
    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プラットフォームのメジャー・バージョンによってパーティション化されます。 バージョンn8 < nを"META-INF/versions/{n}"ディレクトリに持つバージョニング済みエントリは、ベース・エントリおよびバージョン番号i(8 < i < n)を持つエントリをオーバーライドします。

    デフォルトでは、マルチ・リリースjarファイルのJarFileは、マルチ・リリースjarファイルを単純な(unversioned) jarファイルであるかのように処理するように構成されているため、エントリ名は最大でも1つのベース・エントリに関連付けられています。 JarFileは、JarFileJarFile(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ファイルを開いたときに、検証フラグがオンの場合、ファイル内に埋め込まれたその署名に対して、ファイルの内容が検証されます。 検証プロセスには、署名者の証明書の検証は含まれていないことに注意してください。 呼出し側で、JarEntry.getCodeSigners()の戻り値を検査し、署名が信頼できるかどうかをさらに判断してください。

    ほかで指定がない場合、null引数をコンストラクタまたはこのクラスのメソッドへ渡すと、NullPointerExceptionがスローされます。

    実装上の注意:
    APIを使用してJarFile (例えば、コンパイルされたアプリケーションやライブラリの構成を上書きします)を構成できない場合は、2つのSystemプロパティを使用できます。
    • jdk.util.jar.versionには、負でない整数<= Runtime.version().major()String表現である値を割り当てることができます。 この値は、実効ランタイム・バージョンをRuntime.version().major()を評価することによって得られたデフォルト値以外の値に設定するために使用されます。 実効ランタイム・バージョンは、最後の引数の値がJarFile.runtimeVersion()のときにJarFile(File, boolean, int, Runtime.Version)コンストラクタが使用するバージョンです。
    • jdk.util.jar.enableMultiReleaseには、3つのStringtruefalse、またはforceのいずれかを割り当てることができます。 true(デフォルト値)は、マルチ・リリースjarファイル処理を有効にします。 falseは、"Multi-Release"マニフェスト属性を無視して、マルチ・リリースjar処理を無効にします。存在する場合は、マルチ・リリースjarファイルのバージョン管理されたディレクトリを無視します。 さらに、メソッドisMultiRelease()falseを返します。 forceにより、JarFileは構築後にランタイム・バージョン管理に初期化されます。 これはこのコードと事実上同じです: (new JarFile(File, boolean, int, JarFile.runtimeVersion())
    導入されたバージョン:
    1.2
    関連項目:
    Manifest, ZipFile, JarEntry
    • コンストラクタの詳細

      • 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))であり、ここで、nMath.max(version.major(), JarFile.baseVersion().major())である。

        パラメータ:
        file - 読込みのために開かれるjarファイル
        verify - jarファイルが署名されていることを確認するかどうか。
        mode - ファイルが開かれるモード
        version - マルチ・リリースjarファイルのリリース・バージョンを指定
        例外:
        IOException - 入出力エラーが発生した場合
        IllegalArgumentException - mode引数が無効な場合
        SecurityException - ファイルへのアクセスがSecurityManagerによって拒否された場合
        NullPointerException - versionnullの場合
        導入されたバージョン:
        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 IOException
        jarファイルのマニフェストを返します。マニフェストがない場合はnullを返します。
        戻り値:
        jarファイルのマニフェスト。マニフェストがない場合はnull
        例外:
        IllegalStateException - jarファイルが閉じられている場合に、スローされることがある
        IOException - 入出力エラーが発生した場合
      • getJarEntry

        public JarEntry getJarEntry​(String name)
        指定された基本エントリ名の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

        public ZipEntry getEntry​(String name)
        指定された基本エントリ名の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

        public Stream<JarEntry> stream​()
        jarファイル・エントリ上に順序付けされたStreamを返します。 エントリは、Streamに、jarファイルの中央ディレクトリに表示される順序で表示されます。
        オーバーライド:
        クラスZipFilestream
        戻り値:
        このjarファイル内のエントリの順序付けられたStream
        例外:
        IllegalStateException - jarファイルが閉じられている場合
        導入されたバージョン:
        1.8
      • getInputStream

        public InputStream getInputStream​(ZipEntry ze)
                                   throws IOException
        指定されたZIPファイル・エントリの内容を読み込む入力ストリームを返します。
        オーバーライド:
        getInputStream、クラス: ZipFile
        パラメータ:
        ze - ZIPファイル・エントリ
        戻り値:
        指定されたzipファイル・エントリの内容を読み取るための、入力ストリーム
        例外:
        ZipException - zipファイル形式エラーが発生した場合
        IOException - 入出力エラーが発生した場合
        SecurityException - jarファイル・エントリが誤って署名された場合。
        IllegalStateException - jarファイルが閉じられている場合に、スローされることがある