2019-10-23本稿では、URLからファイルをダウンロードする方法について解説します。HttpComponentsなどの外部ライブラリを用いた実装方法についていくつかサンプルを掲載しています。ダウンロードしている間に処理をブロックしたくない場合は、非同期でダウンロードできる方法を参照してください。URLからファイルを非同期ダウンロードする本稿では、URLからファイルを非同期でダウンロードする方法について解説します。パッケージの機能のみで十分可能ですが、ブラウザでファイルをダウンロードするように単純なメソッドはありません。以下は、接続したURLからInputStreamを取得し、FileOutputStreamに書き込むサンプルになります。//入力ストリームからバイト配列に読み込む。bytes");}上のサンプルではurl.openStream()で直接ストリームを開いていますが、ファイルが存在しない場合を考慮したい場合は次のようにレスポンスコードを判定した上でconn.getInputStream()でストリームを取得する方法もあります。conn.getInputStream();また、上のサンプルでは単純はread/writeのため省いていますが、パフォーマンス向上のためにはBufferedInputStream/BufferedOutputStreamを使うことをおすすめします。//処理}BufferedInputStreamとDataInputStreamは排他的ではなく、両方を使用できます。BufferedInputStreamは読み込みをバッファリングしてアクセスする速度を最適化し、DataInputStreamはプラットフォーム依存しないようにデータを読み込み、それ自体は入力をバッファリングしません。テキストであればBufferedInputStreamを使用し、バイナリレベルで制御が必要な場合はDataInputStreamも使用するなど、入力ソースに応じて書き換えてください。パッケージを使用すると、チャネル間でデータを転送することができるため、いちいちメモリに読み込む必要がなくなります。パッケージを使用した方法に比べて、一般的には高速に処理することができます。bytes");}また、JavaSE7以降はFilesヘルパが追加されており、よりシンプルに実装することもできます。パッケージを使用してファイルをダウンロードします。GETやPOSTなどHTTPメソッドを簡単に使い分けできます。このライブラリじゃないとできないというものではなく、ライブラリ自体も標準機能の薄いラッパーなので、このケースでは積極的に使用しなくても困らないように思います。セットアップMavenを使用する場合は、pom.xmlに以下の依存性を追加してください。<version>4.5.10</version></dependency>特にプロジェクト管理ツールを使わない場合はより公式よりzipをダウンロードして、プロジェクトにjarを追加してください。bytes");}Entityからデータをバイト配列に読み込むユーティリティも用意されています。入力ソースのサイズが大きい場合は注意が必要です。セットアップMavenを使用する場合は、pom.xmlに以下の依存性を追加してください。<version>1.32.1</version></dependency>特にプロジェクト管理ツールを使わない場合はMavenのCentralリポジトリよりjarをダウンロードしてください。}}補足サンプルでは省略していますが、レスポンスをファイルに保存する前に、レスポンスコードを確認してください。Foundである旨のhtmlになると思いますが、接続先の実装に依存します。MEsasakiyuひ弱で優しい少年だったが、デーモンと合体。強大な力を得つつも人間の心を失わないデベルマンとなる。デベルマン【鉄壁の解約ボタン】ムームードメインをおすすめできないワケは不透明な利用...URLからファイルを非同期ダウンロードするこのブログの中の人sasakiyu仙台在住、昭和生まれのシステムエンジニア。好きな言語はJava。嫌いな言語はCOBOL。カンファレンスに行った時に質疑ができるよう英語を習いたいと思っています。悪魔的な技術力が得られることを願って日々勉強してます。補足HOMEプログラミングJavaURLからファイルをダウンロードするJavaを中心に、今日から使えるプログラミングの小ネタや、便利なライブラリの使い方を解説しています。