Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

JavaのURLクラスとは?

URLクラスは、Uniform Resource Locator (ユニフォーム・リソース・ロケータ)、World Wide Web上のリソースへのポインタを表すものです。

リソースは、ファイル・ディレクトリのような単純なものである場合や、データベース・検索エンジンに対するクエリーなど、複雑なオブジェクトへの参照の場合もあります。

アクセスしたい情報のURLがわかっていれば、java.net.URLクラスを用いることで、簡単に取得可能です。

URLクラスを使ったWebコンテンツの取得は、次の手順で行われます。

URLクラスを使ったWebコンテンツの取得手順
  • URLクラスをインスタンス化(new)する
  • openStream()を呼び出して、データを取り出すストリームを取得する
  • read()を呼び出してストリームから1バイトずつ情報を取り出す

openStream()の戻り値として取得できるのはInputStreamですが、InputStreamの先は自分のPCにあるファイルではなくインターネット上のWebページにつながっています。

つながっている先がファイルかWebページかの違いなため、ファイルを1バイトずつ読むのと同じように処理可能です。

実際に取得するデータが画像ファイルではなくHTMLのような文字データの場合、文字ストリームとして取得した方が便利です。

そのため、InputStreamReaderを組み合わせて利用する場合もよくあります。

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を返却

URLにアクセス・取得する

では実際に、URLにアクセス・取得するサンプルコードを確認してみましょう。

ここでは、本サイト「style.potepan.com」を取得してみました。

記述例は次の通りです。

■記述例
import java.io.*;
import java.net.*;
public class Main {
    public static void main(String[] args) throws IOException {
      try {
        URL url = new URL("http://style.potepan.com");
        InputStream is = url.openStream();
        InputStreamReader isr = new InputStreamReader(is);
        int i = isr.read();
        while(i != -1) {
          System.out.print((char) i);
          i = isr.read();
        }
        isr.close();
      } catch (IOException e) {
          e.printStackTrace();
      }
    }
}

URLは「https」ではなく「http」で指定します。

■実行結果
mbp:desktop potepan$ java Main
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>301 Moved Permanently</title>
</head><body>
<h1>Moved Permanently</h1>
<p>The document has moved <a href="https://style.potepan.com/">here</a>.</p>
</body></html>

「style.potepan.com」のHTMLを取得できたのがわかります。

なお、「http」ではなく「https」から始まるURLで取得するには、「URLConnectionクラス」を利用します。

URLをエンコード・デコードするには?

JavaでURLのエンコード・デコードをする場合は、「URLEncoderクラス」「URLDecoderクラス」を使用しましょう。

エンコード・デコードする際は、次のルールが適用されます。

URLのエンコード・デコードする際のルール
  • 英数字文字の「a」から「z」、「A」から「Z」、「0」から「9」は元のまま残る
    特・殊文字の「.」、「-」、「*」、および「_」は元のまま残る
  • プラス記号「+」は空白文字「 」に変換する
  • 「%xy」という形式のシーケンスは、バイトの表現として扱われる
    • 「xy」は8ビットを2桁の16進数で表現したもの
    • バイト・シーケンスを連続して1つ以上含む部分文字列はすべて、エンコーディング結果がそれらの連続したバイトになるような文字へと置換する
    • 文字のエンコード・デコードに使用するエンコーディング方式は指定可能ですが、指定しなかった場合には、プラットフォームのデフォルトのエンコーディングが使用される

では、実際にサンプルコードで動きを確認しましょう。

■記述例
import java.io.*;
import java.net.*;

public class Main {
    public static void main(String[] args) throws IOException {
      String str = "https://style.potepan.com/ポテパンスタイルの最新記事です";

      // エンコードの例
      String encodedResult = URLEncoder.encode(str, "UTF-8");
      System.out.println("URLをエンコードします:" + encodedResult);

      // デコードの例
      String decodedResult = URLDecoder.decode(encodedResult, "UTF-8");
      System.out.println("URLをデコードします:" + decodedResult);
    }
}
■実行結果
mbp:desktop potepan$ java Main
URLをエンコードします:https%3A%2F%2Fstyle.potepan.com%2F%E3%83%9D%E3%83%86%E3%83%91%E3%83%B3%E3%82%B9%E3%82%BF%E3%82%A4%E3%83%AB%E3%81%AE%E6%9C%80%E6%96%B0%E8%A8%98%E4%BA%8B%E3%81%A7%E3%81%99
URLをデコードします:https://style.potepan.com/ポテパンスタイルの最新記事です

URLをエンコードした結果と、デコードした結果が取得できました。

適用されるルールの通り、エンコード時は指定した文字以外・日本語部分は、16進数表記に変換されています。

URLとURIの違いは?

URIは、指定のURIと他URIの指し示すものが同一であるか、ベースURIと相対URIを解決して新しいURIを作成するといった操作がメインのクラスです。

一方、URL(Uniform Resource Locator)は、何かしらのリソースが存在することを表現するものです。

リソースは、ファイル・ディレクトリのような単純なものである場合や、データベース・検索エンジンに対するクエリーなど、複雑なオブジェクトへの参照である場合などがあります。

URLはURIでできる単純な文字列表現だけではなく、リソースにアクセスするための手段もあわせて提供しているのです。

参考:URI (Java Platform SE 8 )

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。