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で定義されているエンコーディング方式と同じものではありません。
| コンストラクタ | 説明 |
|---|---|
URL(String spec) |
String表現からURLオブジェクトを生成します。 |
URL(String protocol, String host, int port, String file) |
指定された
protocol、host、port番号、およびfileから、URLオブジェクトを作成します。 |
URL(String protocol, String host, int port, String file, URLStreamHandler handler) |
指定された
protocol、host、port番号、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を生成します。
|
| 修飾子と型 | メソッド | 説明 |
|---|---|---|
boolean |
equals(Object obj) |
このURLと別のオブジェクトとが等しいかどうかを比較します。
|
String |
getAuthority() |
この
URLの機関部分を取得します。 |
Object |
getContent() |
このURLのコンテンツを取得します。
|
Object |
getContent(Class[] classes) |
このURLのコンテンツを取得します。
|
int |
getDefaultPort() |
この
URLに関連するプロトコルのデフォルトのポート番号を取得します。 |
String |
getFile() |
この
URLのファイル名を取得します。 |
String |
getHost() |
該当する場合、この
URLのホスト名を取得します。 |
String |
getPath() |
この
URLのパス部分を取得します。 |
int |
getPort() |
この
URLのポート番号を取得します。 |
String |
getProtocol() |
この
URLのプロトコル名を取得します。 |
String |
getQuery() |
この
URLのクエリー部分を取得します。 |
String |
getRef() |
この
URLのアンカー(「参照」とも呼ばれる)を取得します。 |
String |
getUserInfo() |
この
URLのユーザー情報部分を取得します。 |
int |
hashCode() |
ハッシュ表のインデックス付けに適したint値を作成します。
|
URLConnection |
openConnection() |
URLが参照するリモート・オブジェクトへの接続を表すURLConnectionインスタンスを返します。 |
URLConnection |
openConnection(Proxy proxy) |
openConnection()とほぼ同じですが、接続の確立が指定されたプロキシ経由で行われる点が異なります。プロキシ処理をサポートしないプロトコル・ハンドラは、プロキシのパラメータを無視し、通常の接続を確立します。 |
InputStream |
openStream() |
この
URLへの接続を開き、その接続から読み込むためのInputStreamを返します。 |
boolean |
sameFile(URL other) |
フラグメント・コンポーネント以外の2つのURLを比較します。
|
static void |
setURLStreamHandlerFactory(URLStreamHandlerFactory fac) |
アプリケーションの
URLStreamHandlerFactoryを設定します。 |
String |
toExternalForm() |
この
URLの文字列表現を構築します。 |
String |
toString() |
この
URLの文字列表現を構築します。 |
URI |
toURI() |
このURLと等価な
URIを返します。 |
public URL(String protocol, String host, int port, String file) throws MalformedURLException
protocol、host、port番号、およびfileから、URLオブジェクトを作成します。
hostは、ホスト名、リテラルIPアドレスのいずれかとして表現できます。 IPv6リテラル・アドレスを使用する場合は、RFC 2732で指定されているように、アドレスを角カッコ(「[」と「]」)で囲む必要があります。ただし、「RFC 2373: IP Version 6 Addressing Architecture」で定義されているリテラルIPv6アドレス形式も、使用可能です。
port番号-1の指定は、URLがプロトコルのデフォルトのポートを使用することを示します。
指定されたプロトコルで最初にURLオブジェクトを生成するときには、そのプロトコルのためのストリーム・プロトコル・ハンドラ・オブジェクトが生成されます。このストリーム・プロトコル・ハンドラ・オブジェクトは、URLStreamHandlerクラスのインスタンスです。
URLStreamHandlerFactoryのインスタンスをストリーム・ハンドラ・ファクトリとして設定している場合は、そのインスタンスのcreateURLStreamHandlerメソッドがプロトコル文字列を引数として呼び出されて、ストリーム・プロトコル・ハンドラを作成する。
URLStreamHandlerFactoryが設定されていない場合、あるいはファクトリのcreateURLStreamHandlerメソッドがnullを返した場合は、コンストラクタが次のシステム・プロパティの値を探す。
java.protocol.handler.pkgs
このシステム・プロパティの値がnullでなければ、値は、垂直スラッシュ文字「|」で区切られた、パッケージのリストとして解釈される。 コンストラクタは次の名前を持つクラスをロードしようとする。
<package>.<protocol>.Handler
ここで、<package>にはパッケージの名前が入り、<protocol>にはプロトコルの名前が入る。 このクラスが存在しない場合、あるいはクラスは存在してもそれがURLStreamHandlerのサブクラスではない場合には、リストにある次のパッケージを試すことになる。
<system default package>.<protocol>.Handler
このクラスが存在しない場合、またはクラスは存在するがURLStreamHandlerのサブクラスではない場合は、MalformedURLExceptionがスローされる。
次のプロトコルのプロトコル・ハンドラは、検索パス上に存在することが保証されています。
http, https, file, and jar
その他のプロトコルのプロトコル・ハンドラも使用可能になっている可能性があります。
このコンストラクタによる入力の検証は実行されません。
protocol - 使用するプロトコル名。host - ホスト名。port - ホスト上でのポート番号。file - ホスト上のファイルMalformedURLException - 不明なプロトコルが指定された場合。System.getProperty(java.lang.String), setURLStreamHandlerFactory( java.net.URLStreamHandlerFactory), URLStreamHandler, URLStreamHandlerFactory.createURLStreamHandler( java.lang.String)public URL(String protocol, String host, String file) throws MalformedURLException
protocol名、host名、およびfile名からURLを作成します。 指定されたプロトコルのデフォルト・ポートが使用されます。
このメソッドの機能は、引数にprotocol、host、-1、fileを指定して4つの引数を受け取るコンストラクタを呼び出すのと同じです。 このコンストラクタによる入力の検証は実行されません。
protocol - 使用するプロトコル名。host - ホスト名。file - ホスト上のファイル。MalformedURLException - 不明なプロトコルが指定された場合。URL(java.lang.String, java.lang.String, int, java.lang.String)public URL(String protocol, String host, int port, String file, URLStreamHandler handler) throws MalformedURLException
protocol、host、port番号、file、およびhandlerから、URLオブジェクトを作成します。 port番号-1の指定は、URLがプロトコルのデフォルトのポートを使用することを示します。 handlerにnullを指定した場合、それは、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 - 不明なプロトコルが指定された場合。SecurityException−セキュリティ・マネージャが存在し、セキュリティ・マネージャのcheckPermissionメソッドがストリーム・ハンドラの明示的な指定を許可しない場合。System.getProperty(java.lang.String), setURLStreamHandlerFactory( java.net.URLStreamHandlerFactory), URLStreamHandler, URLStreamHandlerFactory.createURLStreamHandler( java.lang.String), SecurityManager.checkPermission(java.security.Permission), NetPermissionpublic URL(String spec) throws MalformedURLException
String表現からURLオブジェクトを生成します。
このコンストラクタは、1番目の引数にnullを指定して、引数が2つのコンストラクタを呼び出すことと同じです。
spec - URLとして構文解析されるString。MalformedURLException - プロトコルが指定されていないか、不明なプロトコルが見つかったか、specがnullの場合。URL(java.net.URL, java.lang.String)public URL(URL context, String spec) throws MalformedURLException
<scheme>://<authority><path>?<query>#<fragment>
参照はスキーム、機関、パス、クエリー、およびフラグメントの各部分に構文解析されます。 パス・コンポーネントが空でスキーム、機関、およびクエリーの各コンポーネントが未定義の場合、新しいURLが現在のドキュメントへの参照となります。 それ以外の場合は、仕様のフラグメント部分とクエリー部分が新しいURLに使われます。
指定された仕様でスキーム・コンポーネントが定義され、そのスキーム・コンポーネントがコンテキストのスキームと一致しない場合、仕様だけに基づく絶対URLとして新しいURLが生成されます。 そうでない場合は、スキーム・コンポーネントはコンテキストURLを継承します。
機関コンポーネントが仕様にある場合には、仕様は絶対的なものとして扱われ、仕様の機関とパスはコンテキストの機関とパスを置換します。 仕様に機関コンポーネントがない場合、新しいURLの機関はコンテキストを継承します。
仕様のパス・コンポーネントがスラッシュ文字「/」で始まる場合、パスは絶対的なものとして扱われ、仕様のパスがコンテキストのパスを置換します。
それ以外の場合、RFC2396で説明されているように、パスは相対パスとして扱われ、コンテキスト・パスに追加されます。 また、この場合、「..」および「.」によって行われたディレクトリ変更を削除することで、パスは正規化されます。
URL構文解析の詳細な説明については、RFC2396を参照してください。
context - 仕様を構文解析するコンテキスト。spec - URLとして構文解析されるString。MalformedURLException - プロトコルが指定されていないか、不明なプロトコルが見つかったか、specがnullの場合。URL(java.lang.String, java.lang.String, int, java.lang.String), URLStreamHandler、URLStreamHandler.parseURL(java.net.URL, java.lang.String, int, int)public URL(URL context, String spec, URLStreamHandler handler) throws MalformedURLException
context - 仕様を構文解析するコンテキスト。spec - URLとして構文解析されるString。handler - URLのストリーム・ハンドラ。MalformedURLException - プロトコルが指定されていないか、不明なプロトコルが見つかったか、specがnullの場合。SecurityException−セキュリティ・マネージャが存在し、セキュリティ・マネージャのcheckPermissionメソッドがストリーム・ハンドラの指定を許可しない場合。URL(java.lang.String, java.lang.String, int, java.lang.String), URLStreamHandler、URLStreamHandler.parseURL(java.net.URL, java.lang.String, int, int)public String getQuery()
URLのクエリー部分を取得します。URLのクエリー部分。存在しない場合はnullpublic String getPath()
URLのパス部分を取得します。URLのパス部分。存在しない場合は空の文字列public String getUserInfo()
URLのユーザー情報部分を取得します。URLのユーザー情報部分。存在しない場合はnullpublic String getAuthority()
URLの機関部分を取得します。URLの機関部分public int getPort()
URLのポート番号を取得します。public int getDefaultPort()
URLに関連するプロトコルのデフォルトのポート番号を取得します。 URLスキームまたはURLのURLStreamHandlerがデフォルトのポート番号を定義しない場合は、-1が返されます。 public String getProtocol()
URLのプロトコル名を取得します。URLのプロトコル。public String getHost()
URLのホスト名を取得します。 ホスト名の形式はRFC 2732に準拠します。つまり、リテラルIPv6アドレスの場合、このメソッドは角カッコ(「[」および「]」)で囲まれたIPv6アドレスを返します。 URLのホスト名。public String getFile()
URLのファイル名を取得します。 返されるファイル部分は、getQuery()の値が存在する場合には、その値とgetPath()の値を連結したものと同じになります。 クエリー部分が存在しない場合、このメソッドとgetPath()は同じ結果を返します。 URLのファイル名。存在しない場合は空の文字列public String getRef()
URLのアンカー(「参照」とも呼ばれる)を取得します。URLのアンカー(「参照」とも呼ばれる)。存在しない場合はnullpublic boolean equals(Object obj)
指定されたオブジェクトがURLでない場合、このメソッドは直ちにfalseを返します。
2つのURLオブジェクトが等しいのは、同じプロトコルを持ち、同じホストを参照し、ホスト上のポート番号が同じで、ファイルとファイルのフラグメントが同じ場合です。
2つのホストが等価と見なされるのは、両方のホスト名が同じIPアドレスに解決されるか、どちらかのホスト名を解決できない場合は、大文字小文字に関係なくホスト名が等しいか、両方のホスト名がnullに等しい場合です。
ホスト比較には名前解決が必要なので、この操作はブロック操作です。
ノート: equalsの定義された動作は、HTTPの仮想ホストと一致しないことが知られています。
equals、クラスObjectobj−比較対象のURL。true、そうでない場合はfalse。Object.hashCode(), HashMappublic int hashCode()
ハッシュ・コードはURL比較に関連するすべてのURLコンポーネントに基づいています。 したがって、この操作はブロック操作です。
hashCode、クラスObjectURLのハッシュ・コード。Object.equals(java.lang.Object), System.identityHashCode(java.lang.Object)public boolean sameFile(URL other)
フラグメント・コンポーネントを考慮しないで、このURLとother引数が等しい場合は、trueを返します。
other - 比較対象のURL。true、そうでない場合はfalse。public String toString()
URLの文字列表現を構築します。 このオブジェクトのストリーム・プロトコル・ハンドラのtoExternalFormメソッドを呼び出すことによって文字列が作成されます。 toString、クラスObjectURL(java.lang.String, java.lang.String, int, java.lang.String), URLStreamHandler.toExternalForm(java.net.URL)public String toExternalForm()
URLの文字列表現を構築します。 このオブジェクトのストリーム・プロトコル・ハンドラのtoExternalFormメソッドを呼び出すことによって文字列が作成されます。 URL(java.lang.String, java.lang.String, int, java.lang.String), URLStreamHandler.toExternalForm(java.net.URL)public URI toURI() throws URISyntaxException
URIを返します。 このメソッドは、new URI (this.toString())と同じように機能します。
RFC 2396に準拠したURLインスタンスは必ずURIに変換できることに注意してください。 ただし、厳密に準拠していないURLは、URIに変換できない可能性があります。
URISyntaxException−このURLの形式がRFC2396に厳密に従っていないため、URIに変換できない場合。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が返されます。
URLConnection。IOException - 入出力例外が発生した場合。URL(java.lang.String, java.lang.String, int, java.lang.String)public URLConnection openConnection(Proxy proxy) throws IOException
openConnection()とほぼ同じですが、接続の確立が指定されたプロキシ経由で行われる点が異なります。プロキシ処理をサポートしないプロトコル・ハンドラは、プロキシのパラメータを無視し、通常の接続を確立します。 このメソッドを呼び出すと、システムのデフォルトのProxySelector設定が横取りされます。 proxy−この接続の確立に使用されるプロキシ。 直接接続を行いたい場合はProxy.NO_PROXYを指定すべきである。 URLConnection。IOException - 入出力例外が発生した場合。SecurityException−セキュリティ・マネージャが存在し、プロキシに接続する権限を呼出し元が持っていない場合。IllegalArgumentException−プロキシがnullであるかプロキシの型が正しくない場合にスローされるUnsupportedOperationException−プロトコル・ハンドラを実装するサブクラスがこのメソッドをサポートしない場合。URL(java.lang.String, java.lang.String, int, java.lang.String), URLConnection、URLStreamHandler.openConnection(java.net.URL, java.net.Proxy)public final InputStream openStream() throws IOException
URLへの接続を開き、その接続から読み込むためのInputStreamを返します。 このメソッドは次のメソッドの短縮形です。
openConnection().getInputStream()
IOException - 入出力例外が発生した場合。openConnection(), URLConnection.getInputStream()public final Object getContent() throws IOException
openConnection().getContent()
IOException - 入出力例外が発生した場合。URLConnection.getContent()public final Object getContent(Class[] classes) throws IOException
openConnection().getContent(Class[])
classes−Java型の配列IOException - 入出力例外が発生した場合。URLConnection.getContent(Class[])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() バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。 そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright © 1993, 2025, Oracle and/or its affiliates. All rights reserved. Use is subject to license terms. Documentation Redistribution Policyも参照してください。