モジュール 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ファイル・ファイルを開くときに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つの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
  • フィールドのサマリー

    フィールド 
    修飾子と型 フィールド 説明
    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マニフェスト・ファイルの名前です。

    クラス java.util.zip.ZipFileで宣言されたフィールド

    OPEN_DELETE, OPEN_READ
  • コンストラクタのサマリー

    コンストラクタ 
    コンストラクタ 説明
    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を返します。

    クラス java.util.zip.ZipFileで宣言されたメソッド

    close, getComment, getName, size

    クラス java.lang.Objectで宣言されたメソッド

    cloneequalsfinalizegetClasshashCodenotifynotifyAlltoStringwaitwaitwait
  • フィールド詳細

  • コンストラクタの詳細

    • 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.feature(), JarFile.baseVersion().feature())です。

      パラメータ:
      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
    • versionedStream

      public Stream<JarEntry> 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ファイルが閉じられている場合に、スローされることがある