1.URL
クラス
I/O ストリームの操作について学習しました。ファイルの操作について学習しました。次は何を勉強すればいいでしょうか?インターネットを含むネットワークを使った作業についてはどうでしょうか? 有望ですね。
Java では、インターネットの操作はファイルの操作と同じくらい難しくありません。まあ、ほんの少しだけかもしれない。
インターネット リソースを操作するために、Java には特別なクラス — がありますURL
。これからご覧いただくように、スツールと同じくらいシンプルです。
Web ページの取得
インターネットからテキスト ファイルをダウンロードし、その内容を画面に表示するには、何行のコードを記述する必要があると思いますか? 10? 100? 1000? それとも5つでしょうか?
コード | ノート |
---|---|
|
ページへのパスを含む URL オブジェクトを作成しますURL オブジェクトから を取得します すべてのバイトを読み取り、バイトの配列を返します 配列を 文字列に変換します 文字列を表示します InputStream |
HTML ファイルの内容が画面に表示されます。
コンソール出力 |
---|
|
File
とでの作業の比較URL
URL
File
はまたはに似ていますPath
が、Path
ファイル システム内のリソースへのパスを保存し、URL
インターネット上のリソースへのパスを保存します。
InputStream
メソッドを 1 回呼び出してオブジェクトを取得すると、すべての魔法が起こりますopenStream()
。これはありふれた物体であり、私たちはすでに内部と外部を研究しています。オブジェクトを取得すると、すべてが明らかになりますInputStream
。結局のところ、私たちはそこからデータを取得する方法をすでに知っています。
見てください。最初の 2 行だけが、わずかに異なっています。これで、標準化とデータ ストリームのチェーンの操作の利点がわかりました。
インターネットの操作 | ファイルの操作 |
---|---|
|
|
2.URLConnection
クラス
単にインターネットからデータを読み取るだけでなく、データをアップロードすることもできます。データのアップロードは、読み取りよりもはるかに複雑です。さらにいくつかの方法が必要になります。例えば:
コード | ノート |
---|---|
|
ページへのパスを含む URL オブジェクトを作成します 双方向接続を作成します 出力ストリームを取得し ます データをそこに置き ます 入力ストリームを取得します そこからデータを読み取ります |
ここではメソッドを呼び出さないことに注意してくださいurl.openStream()
。代わりに、より長いルートを選択します。
URLConnection.openConnection()
まず、次のメソッドを使用して安定した双方向接続を確立します。- 次に、メソッドを使用してデータを送信するためのストリームを取得し
connection.getOutputStream()
、データをサーバーに送信します - 次に、メソッドを使用してデータを読み取るためのストリームを取得し
connection.getInputStream()
、そこからデータの読み取りを開始します。
資源管理
厳密に言えば、安全に処理するには、すべてのストリームをブロックでラップする必要がありますtry-with-resources
。InputStream
そして、裸のものをもっと便利なもので包んでも問題はありませんOutputStream
。たとえば、 やPrintStream
などですBufferedReader
。
ここまでをすべて行うと、コードは次のようになります。
URL url = new URL("https://codegym.cc");
URLConnection connection = url.openConnection(); // Send data
try (OutputStream output = connection.getOutputStream();
PrintStream sender = new PrintStream(output))
{
sender.println("Hello");
}
// Read data
try(InputStream input = connection.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(input)))
{
while (reader.ready())
System.out.println(reader.readLine());
}
3. ネットワークの使用例
インターネットから何かをダウンロードしてみましょう。しかも、ダウンロードするだけでなく、ディスクに保存することもできます。
たとえば、Google ホームページの画像をディスクに保存するプログラムを作成してみましょう。
原則として、ここでは複雑なことは何もありません。最も単純な形式では、このコードは次のようになります。
ファイルをディスクに保存する |
---|
|
最初の 3 行を使用して、インターネット リソース、つまり画像からデータ ストリームを受信します。
4 行目では、画像を保存するファイルの名前を作成します。名前は任意ですが、ファイル拡張子はインターネット上の画像の拡張子と一致する必要があります。これにより、ローカルの画像ビューアが画像を正しく開くことができるようになります。
そして最後の行は、Files
クラスのcopy
メソッドの 1 つです。クラスFiles
にはそれらがいくつかあります。InputStream
私たちが使用したこのメソッドは、最初のパラメータとしてバイト ストリーム ( ) を受け取り、2 番目のパラメータとしてデータを書き込むファイルの名前を受け取ります。
理論的には、URL
画像の が短ければ、このコードは 1 行で書くこともできます。
ストリームからファイルへのデータのコピー |
---|
|
もちろん、このように記述する必要はありませんが、この例は、Java の I/O ストリームがいかに便利で強力であるかを示しています。
GO TO FULL VERSION