モジュール java.base
パッケージ java.net

クラスURL

  • すべての実装されたインタフェース:
    Serializable

    public final class URL
    extends Object
    implements Serializable
    URLクラスは、Uniform Resource Locator (ユニフォーム・リソース・ロケータ)、つまりWorld Wide Web上の「リソース」へのポインタを表します。 リソースは、ファイルやディレクトリのような単純なものであることも、データベースや検索エンジンに対するクエリーなど、より複雑なオブジェクトへの参照であることもあります。 URLの種類や形式の詳細については、次を参照してください。 Types of URL

    一般に、URLはいくつかの部分に分解できます。 次に例を示します。

         http://www.example.com/docs/resource1.html
     

    上記のURLは、使用すべきプロトコルがhttp (HyperText Transfer Protocol)であることと、www.example.comという名前のホスト・マシン上に情報が存在していることを示しています。 そのホスト・マシン上の情報には、/docs/resource1.htmlという名前が付けられています。 ホスト・マシン上におけるこの名前の正確な意味は、プロトコルとホストの両方に依存します。 一般的には情報はファイル内に保存されていますが、動的に生成される場合もあります。 URLのこうした部分はパス・コンポーネントと呼ばれます。

    URLにはオプションで「ポート」を指定できます。これは、TCP接続の確立先となる、リモート・ホスト・マシン上のポート番号です。 ポートを指定しなかった場合は、代わりにプロトコルのデフォルト・ポートが使用されます。 たとえば、httpのデフォルト・ポートは80です。 次のように別のポートを指定することもできます。

         http://www.example.com:1080/docs/resource1.html
     

    URLの構文は、「RFC 2396: Uniform Resource Identifiers (URI): Generic Syntax」で定義され、「RFC 2732: Format for Literal IPv6 Addresses in URLs」で修正されています。 リテラルIPv6アドレス形式ではスコープIDもサポートされます。 スコープIDの構文や使用方法については、ここを参照してください。

    URLには「フラグメント」(「ref」または「参照(reference)」とも呼ぶ)を追加できます。 フラグメントは、シャープ記号文字「#」とそれに続くいくつかの文字によって示されます。 次に例を示します。

         http://java.sun.com/index.html#chapter1
     

    本来は、このフラグメントはURLの一部ではありません。 たとえば、上に示したフラグメントは、指定されたリソースを取得したあと、そのドキュメントの中でchapter1というタグが付いている部分をアプリケーションによる処理の対象とすることを示します。 タグの意味はリソースによって異なります。

    アプリケーションは「相対URL」を指定することもできます。このURLには、別のURLを基準としてリソースを検索するのに必要な情報しか含まれていません。 相対URLはHTMLページ内でよく使用されます。 たとえば、次のURLがあるとします。

         http://java.sun.com/index.html
     
    このHTMLページの中に次の相対URLが含まれているとします。
         FAQ.html
     
    これは次の短縮形とみなされます。
         http://java.sun.com/FAQ.html
     

    相対URLでは、URLのすべてのコンポーネントを指定する必要はありません。 プロトコルやホスト名、ポート番号を省略した場合には、すべてのコンポーネントが指定されているURLから値が継承されます。 ファイル・コンポーネントは指定しなければいけません。 オプション指定のフラグメントは継承されません。

    URLクラス自体がRFC2396に定義されたエスケープ・メカニズムに従ってURLコンポーネントのエンコードやデコードを行うことはありません。 URLの呼出し前にエスケープの必要なすべてのフィールドをエンコードしておくことは、呼出し元の責任です。URLから返されたすべてのエスケープ済みフィールドをデコードすることも、同様です。 さらに、URLは、URLエスケープの知識を持たないため、同じURLのエンコードされた形式とデコードされた形式の等価性を判断できません。 たとえば、次の2つのURLがあるとします。

        http://foo.com/hello world/ and http://foo.com/hello%20world
    これらは、互いに等しくないと見なされます。

    URIクラスは特定の状況において、そのコンポーネント・フィールドに対してエスケープ処理を実行することに注意してください。 URLのエンコードとデコードを管理する際の推奨の方法は、URIを使用して、これら2つのクラス間の変換をtoURI()URI.toURL()を使って行うことです。

    URLEncoderクラスとURLDecoderクラスを使用することもできますが、これらはHTML形式のエンコーディング専用です。また、このエンコーディングは、RFC2396で定義されているエンコーディング方式と同じものではありません。

    導入されたバージョン:
    1.0
    関連項目:
    直列化された形式
    • コンストラクタのサマリー

      コンストラクタ 
      コンストラクタ 説明
      URL​(String spec)
      String表現からURLオブジェクトを生成します。
      URL​(String protocol, String host, int port, String file)
      指定されたprotocolhostport番号、およびfileから、URLオブジェクトを作成します。
      URL​(String protocol, String host, int port, String file, URLStreamHandler handler)
      指定されたprotocolhostport番号、file、およびhandlerから、URLオブジェクトを作成します。
      URL​(String protocol, String host, String file)
      指定されたprotocol名、host名、およびfile名からURLを作成します。
      URL​(URL context, String spec)
      指定されたコンテキスト内の指定された仕様で構文解析することによって、URLを生成します。
      URL​(URL context, String spec, URLStreamHandler handler)
      指定されたコンテキスト内の指定されたハンドラで、指定された仕様を構文解析してURLを生成します。
    • コンストラクタの詳細

      • URL

        public URL​(String protocol,
                   String host,
                   int port,
                   String file)
            throws MalformedURLException
        指定されたprotocolhostport番号、およびfileから、URLオブジェクトを作成します。

        hostは、ホスト名、リテラルIPアドレスのいずれかとして表現できます。 IPv6リテラル・アドレスを使用する場合は、RFC 2732で指定されているように、アドレスを角カッコ(「[」「]」)で囲む必要があります。ただし、「RFC 2373: IP Version 6 Addressing Architecture」で定義されているリテラルIPv6アドレス形式も、使用可能です。

        port番号-1の指定は、URLがプロトコルのデフォルトのポートを使用することを示します。

        指定されたプロトコルで最初にURLオブジェクトを生成するときには、そのプロトコルのためのストリーム・プロトコル・ハンドラ・オブジェクトが生成されます。このストリーム・プロトコル・ハンドラ・オブジェクトは、URLStreamHandlerクラスのインスタンスです。

        1. 以前にアプリケーションがURLStreamHandlerFactoryのインスタンスをストリーム・ハンドラ・ファクトリとして設定している場合は、そのインスタンスのcreateURLStreamHandlerメソッドがプロトコル文字列を引数として呼び出されて、ストリーム・プロトコル・ハンドラを作成する。
        2. URLStreamHandlerFactoryがまだ設定されていない場合、またはcreateURLStreamHandlerメソッドがnullを返した場合は、ServiceLoaderメカニズムを使用して、システム・クラス・ローダーを使用してURLStreamHandlerProvider実装を特定します。 プロバイダが配置される順序は実装固有であり、実装は配置されたプロバイダを自由にキャッシュできます。 createURLStreamHandlerからスローされたServiceConfigurationErrorErrorまたはRuntimeExceptionが発生した場合は、呼び出しスレッドに伝播されます。 各プロバイダの createURLStreamHandlerメソッド(インスタンス化されている場合)は、プロバイダが非nullを返すか、すべてのプロバイダが使い果たされるまで、プロトコル文字列とともに呼び出されます。
        3. 前のステップでプロトコル・ハンドラが見つからない場合、コンストラクタはシステム・プロパティの値を読み取ります:
          java.protocol.handler.pkgs
          このシステム・プロパティの値がnullでなければ、値は、垂直スラッシュ文字「|」で区切られた、パッケージのリストとして解釈される。 コンストラクタは次の名前を持つクラスをロードしようとする。
          <package>.<protocol>.Handler
          ここで、<package>はパッケージの名前に置き換えられ、<protocol>はプロトコルの名前に置き換えられます。 このクラスが存在しない場合、あるいはクラスは存在してもそれがURLStreamHandlerのサブクラスではない場合には、リストにある次のパッケージを試すことになる。
        4. 前のステップでプロトコル・ハンドラが見つからない場合、コンストラクタは組み込みのプロトコル・ハンドラをロードしようとします。 このクラスが存在しない場合、またはクラスは存在するがURLStreamHandlerのサブクラスではない場合は、MalformedURLExceptionがスローされる。

        次のプロトコルのプロトコル・ハンドラは、検索パス上に存在することが保証されています。

             http, https, file, and jar
         
        その他のプロトコルのプロトコル・ハンドラも使用可能になっている可能性があります。 クラスパス上のプラットフォーム・クラスまたはクラスをロードするために使用されるプロトコル・ハンドラなどの一部のプロトコル・ハンドラは、オーバーライドできません。 そのような制限の詳細、およびそれらの制限が(実行時の初期化中など)に適用される場合、実装固有であり、したがって指定されていない

        このコンストラクタによる入力の検証は実行されません。

        パラメータ:
        protocol - 使用するプロトコル名。
        host - ホスト名。
        port - ホスト上でのポート番号。
        file - ホスト上のファイル
        例外:
        MalformedURLException - 未知のプロトコルまたはポートが-1以外の負の数である場合
        関連項目:
        System.getProperty(java.lang.String), setURLStreamHandlerFactory( java.net.URLStreamHandlerFactory), URLStreamHandler, URLStreamHandlerFactory.createURLStreamHandler( java.lang.String)
      • URL

        public URL​(String protocol,
                   String host,
                   String file)
            throws MalformedURLException
        指定されたprotocol名、host名、およびfile名からURLを作成します。 指定されたプロトコルのデフォルト・ポートが使用されます。

        このコンストラクタは、引数が4つのコンストラクタに相当し、指定されたプロトコルのデフォルト・ポートを使用する点のみが異なります。 このコンストラクタによる入力の検証は実行されません。

        パラメータ:
        protocol - 使用するプロトコル名。
        host - ホスト名。
        file - ホスト上のファイル。
        例外:
        MalformedURLException - 不明なプロトコルが指定された場合。
        関連項目:
        URL(java.lang.String, java.lang.String, int, java.lang.String)
      • URL

        public URL​(String protocol,
                   String host,
                   int port,
                   String file,
                   URLStreamHandler handler)
            throws MalformedURLException
        指定されたprotocolhostport番号、file、およびhandlerから、URLオブジェクトを作成します。 port番号-1の指定は、URLがプロトコルのデフォルトのポートを使用することを示します。 handlernullを指定した場合、それは、java.net.URL#URL(java.lang.String, java.lang.String, int, java.lang.String)で概説したプロトコルのデフォルト・ストリーム・ハンドラを、URLが使用すべきであることを示します。

        ハンドラがnullではなく、セキュリティ・マネージャが存在する場合、NetPermission("specifyStreamHandler")アクセス権を指定してセキュリティ・マネージャのcheckPermissionメソッドが呼び出されます。 その結果、SecurityExceptionが発生することがあります。 このコンストラクタによる入力の検証は実行されません。

        パラメータ:
        protocol - 使用するプロトコル名。
        host - ホスト名。
        port - ホスト上でのポート番号。
        file - ホスト上のファイル
        handler - URLのストリーム・ハンドラ。
        例外:
        MalformedURLException - 未知のプロトコルまたはポートが-1以外の負の数である場合
        SecurityException−セキュリティ・マネージャが存在し、セキュリティ・マネージャのcheckPermissionメソッドがストリーム・ハンドラの明示的な指定を許可しない場合。
        関連項目:
        System.getProperty(java.lang.String), setURLStreamHandlerFactory( java.net.URLStreamHandlerFactory), URLStreamHandler, URLStreamHandlerFactory.createURLStreamHandler( java.lang.String), SecurityManager.checkPermission(java.security.Permission), NetPermission
      • URL

        public URL​(String spec)
            throws MalformedURLException
        String表現からURLオブジェクトを生成します。

        このコンストラクタは、1番目の引数にnullを指定して、引数が2つのコンストラクタを呼び出すことと同じです。

        パラメータ:
        spec - URLとして構文解析されるString
        例外:
        MalformedURLException - プロトコルが指定されていないか、未知のプロトコルが見つかった場合、またはspecnullの場合、または解析されたURLが関連プロトコルの特定の構文に準拠していない場合。
        関連項目:
        URL(java.net.URL, java.lang.String)
      • URL

        public URL​(URL context,
                   String spec)
            throws MalformedURLException
        指定されたコンテキスト内の指定された仕様で構文解析することによって、URLを生成します。 新しいURLは、RFC2396の「Uniform Resource Identifiers : Generic * Syntax」の説明に従って、指定されたコンテキストURLとspec引数から作成されます。
                  <scheme>://<authority><path>?<query>#<fragment>
         
        参照はスキーム、機関、パス、クエリー、およびフラグメントの各部分に構文解析されます。 パス・コンポーネントが空でスキーム、機関、およびクエリーの各コンポーネントが未定義の場合、新しいURLが現在のドキュメントへの参照となります。 それ以外の場合は、仕様のフラグメント部分とクエリー部分が新しいURLに使われます。

        指定された仕様でスキーム・コンポーネントが定義され、そのスキーム・コンポーネントがコンテキストのスキームと一致しない場合、仕様だけに基づく絶対URLとして新しいURLが生成されます。 そうでない場合は、スキーム・コンポーネントはコンテキストURLを継承します。

        機関コンポーネントが仕様にある場合には、仕様は絶対的なものとして扱われ、仕様の機関とパスはコンテキストの機関とパスを置換します。 仕様に機関コンポーネントがない場合、新しいURLの機関はコンテキストを継承します。

        仕様のパス・コンポーネントがスラッシュ文字「/」で始まる場合、パスは絶対的なものとして扱われ、仕様のパスがコンテキストのパスを置換します。

        それ以外の場合、RFC2396で説明されているように、パスは相対パスとして扱われ、コンテキスト・パスに追加されます。 また、この場合、「..」および「.」によって行われたディレクトリ変更を削除することで、パスは正規化されます。

        URL構文解析の詳細な説明については、RFC2396を参照してください。

        パラメータ:
        context - 仕様を構文解析するコンテキスト。
        spec - URLとして構文解析されるString
        例外:
        MalformedURLException - プロトコルが指定されていないか、未知のプロトコルが見つかった場合、またはspecnullの場合、または解析されたURLが関連プロトコルの特定の構文に準拠していない場合。
        関連項目:
        URL(java.lang.String, java.lang.String, int, java.lang.String), URLStreamHandlerURLStreamHandler.parseURL(java.net.URL, java.lang.String, int, int)
      • URL

        public URL​(URL context,
                   String spec,
                   URLStreamHandler handler)
            throws MalformedURLException
        指定されたコンテキスト内の指定されたハンドラで、指定された仕様を構文解析してURLを生成します。 ハンドラがnullの場合、2つの引数を取るコンストラクタと同様の解析が行われます。
        パラメータ:
        context - 仕様を構文解析するコンテキスト。
        spec - URLとして構文解析されるString
        handler - URLのストリーム・ハンドラ。
        例外:
        MalformedURLException - プロトコルが指定されていないか、未知のプロトコルが見つかった場合、またはspecnullの場合、または解析されたURLが関連プロトコルの特定の構文に準拠していない場合。
        SecurityException−セキュリティ・マネージャが存在し、セキュリティ・マネージャのcheckPermissionメソッドがストリーム・ハンドラの指定を許可しない場合。
        関連項目:
        URL(java.lang.String, java.lang.String, int, java.lang.String), URLStreamHandlerURLStreamHandler.parseURL(java.net.URL, java.lang.String, int, int)
    • メソッドの詳細

      • getQuery

        public String getQuery()
        このURLのクエリー部分を取得します。
        戻り値:
        このURLのクエリー部分。存在しない場合はnull
        導入されたバージョン:
        1.3
      • getPath

        public String getPath()
        このURLのパス部分を取得します。
        戻り値:
        このURLのパス部分。存在しない場合は空の文字列
        導入されたバージョン:
        1.3
      • getUserInfo

        public String getUserInfo()
        このURLのユーザー情報部分を取得します。
        戻り値:
        このURLのユーザー情報部分。存在しない場合はnull
        導入されたバージョン:
        1.3
      • getAuthority

        public String getAuthority()
        このURLの機関部分を取得します。
        戻り値:
        このURLの機関部分
        導入されたバージョン:
        1.3
      • getPort

        public int getPort()
        このURLのポート番号を取得します。
        戻り値:
        ポート番号。ポートが設定されていない場合は -1
      • getDefaultPort

        public int getDefaultPort()
        このURLに関連するプロトコルのデフォルトのポート番号を取得します。 URLスキームまたはURLのURLStreamHandlerがデフォルトのポート番号を定義しない場合は、-1が返されます。
        戻り値:
        ポート番号
        導入されたバージョン:
        1.4
      • getProtocol

        public String getProtocol()
        このURLのプロトコル名を取得します。
        戻り値:
        このURLのプロトコル。
      • getHost

        public String getHost()
        該当する場合、このURLのホスト名を取得します。 ホスト名の形式はRFC 2732に準拠します。つまり、リテラルIPv6アドレスの場合、このメソッドは角カッコ(「[」および「]」)で囲まれたIPv6アドレスを返します。
        戻り値:
        このURLのホスト名。
      • getFile

        public String getFile()
        このURLのファイル名を取得します。 返されるファイル部分は、getQuery()の値が存在する場合には、その値とgetPath()の値を連結したものと同じになります。 クエリー部分が存在しない場合、このメソッドとgetPath()は同じ結果を返します。
        戻り値:
        このURLのファイル名。存在しない場合は空の文字列
      • getRef

        public String getRef()
        このURLのアンカー(「参照」とも呼ばれる)を取得します。
        戻り値:
        このURLのアンカー(「参照」とも呼ばれる)。存在しない場合はnull
      • equals

        public boolean equals​(Object obj)
        このURLと別のオブジェクトとが等しいかどうかを比較します。

        指定されたオブジェクトがURLでない場合、このメソッドは直ちにfalseを返します。

        2つのURLオブジェクトが等しいのは、同じプロトコルを持ち、同じホストを参照し、ホスト上のポート番号が同じで、ファイルとファイルのフラグメントが同じ場合です。

        2つのホストが等価と見なされるのは、両方のホスト名が同じIPアドレスに解決されるか、どちらかのホスト名を解決できない場合は、大文字小文字に関係なくホスト名が等しいか、両方のホスト名がnullに等しい場合です。

        ホスト比較には名前解決が必要なので、この操作はブロック操作です。

        ノート: equalsの定義された動作は、HTTPの仮想ホストと一致しないことが知られています。

        Overrides:
        equals 、クラス:  Object
        パラメータ:
        obj−比較対象のURL。
        戻り値:
        オブジェクトが同じである場合はtrue、そうでない場合はfalse
        関連項目:
        Object.hashCode()HashMap
      • hashCode

        public int hashCode()
        ハッシュ表のインデックス付けに適したint値を作成します。

        ハッシュ・コードはURL比較に関連するすべてのURLコンポーネントに基づいています。 したがって、この操作はブロック操作です。

        Overrides:
        hashCode 、クラス:  Object
        戻り値:
        URLのハッシュ・コード。
        関連項目:
        Object.equals(java.lang.Object), System.identityHashCode(java.lang.Object)
      • sameFile

        public boolean sameFile​(URL other)
        フラグメント・コンポーネント以外の2つのURLを比較します。

        フラグメント・コンポーネントを考慮しないで、このURLother引数が等しい場合は、trueを返します。

        パラメータ:
        other - 比較対象のURL
        戻り値:
        参照するリモート・オブジェクトが同じである場合はtrue、そうでない場合はfalse
      • toURI

        public URI toURI()
                  throws URISyntaxException
        このURLと等価なURIを返します。 このメソッドは、new URI (this.toString())と同じように機能します。

        RFC 2396に準拠したURLインスタンスは必ずURIに変換できることに注意してください。 ただし、厳密に準拠していないURLは、URIに変換できない可能性があります。

        戻り値:
        このURLと等価なURIインスタンス。
        例外:
        URISyntaxException−このURLの形式がRFC2396に厳密に従っていないため、URIに変換できない場合。
        導入されたバージョン:
        1.5
      • openConnection

        public URLConnection openConnection()
                                     throws IOException
        URLが参照するリモート・オブジェクトへの接続を表すURLConnectionインスタンスを返します。

        このURLのプロトコル・ハンドラのURLStreamHandler.openConnection(URL)メソッドを呼び出すたびに、URLConnectionの新しいインスタンスが作成されます。

        URLConnectionインスタンスは作成時に実際のネットワーク接続を確立しないことに注意してください。 これが発生するのは、URLConnection.connect()の呼出し時のみです。

        HTTPやJARといったURLのプロトコルごとに一般または特殊なURLConnectionサブクラスが存在しており、そのサブクラスは次のパッケージまたはそのサブパッケージのいずれかに属します。java.lang、java.io、java.util, java.net。返される接続の型は、そのサブクラスになります。 たとえば、HTTPの場合はHttpURLConnectionが返され、JARの場合はJarURLConnectionが返されます。

        戻り値:
        URLにリンクしているURLConnection
        例外:
        IOException - 入出力例外が発生した場合。
        関連項目:
        URL(java.lang.String, java.lang.String, int, java.lang.String)
      • openStream

        public final InputStream openStream()
                                     throws IOException
        このURLへの接続を開き、その接続から読み込むためのInputStreamを返します。 このメソッドは次のメソッドの短縮形です。
             openConnection().getInputStream()
         
        戻り値:
        URL接続から入力を読み込むための入力ストリーム。
        例外:
        IOException - 入出力例外が発生した場合。
        関連項目:
        openConnection(), URLConnection.getInputStream()
      • getContent

        public final Object getContent()
                                throws IOException
        このURLのコンテンツを取得します。 このメソッドは次のメソッドの短縮形です。
             openConnection().getContent()
         
        戻り値:
        このURLのコンテンツ。
        例外:
        IOException - 入出力例外が発生した場合。
        関連項目:
        URLConnection.getContent()
      • getContent

        public final Object getContent​(Class<?>[] classes)
                                throws IOException
        このURLのコンテンツを取得します。 このメソッドは次のメソッドの短縮形です。
             openConnection().getContent(classes)
         
        パラメータ:
        classes−Java型の配列
        戻り値:
        クラスの配列で指定された型が最初に一致した、このURLのコンテンツ・オブジェクト。要求された型がサポートされていない場合はnull。
        例外:
        IOException - 入出力例外が発生した場合。
        導入されたバージョン:
        1.3
        関連項目:
        URLConnection.getContent(Class[])
      • setURLStreamHandlerFactory

        public static void setURLStreamHandlerFactory​(URLStreamHandlerFactory fac)
        アプリケーションのURLStreamHandlerFactoryを設定します。 このメソッドは、使用するJava仮想マシンで1回しか呼び出せません。

        URLStreamHandlerFactoryインスタンスは、プロトコル名からストリーム・プロトコル・ハンドラを構築するのに使用されます。

        セキュリティ・マネージャが存在する場合、この操作が許可されるように、このメソッドは最初にセキュリティ・マネージャのcheckSetFactoryメソッドを呼び出します。 この結果、SecurityExceptionがスローされることがあります。

        パラメータ:
        fac - 目的のファクトリ。
        例外:
        Error−アプリケーションでファクトリがすでに設定されている場合。
        SecurityException - セキュリティ・マネージャが存在し、そのcheckSetFactoryメソッドでこの操作が許可されていない場合。
        関連項目:
        URL(java.lang.String, java.lang.String, int, java.lang.String), URLStreamHandlerFactory, SecurityManager.checkSetFactory()