2019-10-25本稿では、URLからファイルを非同期でダウンロードする方法について解説します。外部ライブラリを用いた実装方法についていくつかサンプルを掲載します。非同期を考慮しないシンプルな実装方法についてはこちらを参照ください。URLからファイルをダウンロードする本稿では、URLからファイルをダウンロードする方法について解説します。導入されたもので、WorkerThreadパターンをシンプルに実装することができます。以下のサンプルではファイルをダウンロードするタスクをExecutorServiceに送信して、スレッドプール内で実行しています。ここでは戻り値を気にしていませんが、Futureクラスを得るとタスクを追跡することができます。サンプルでは完了までの時間を考慮していませんが、ダウンロードにある程度時間がかかる見込みがあれば、CompletableFutureを使用してすべてのタスクの完了を待ってから終了しましょう。パッケージを使用してファイルをダウンロードします。GETやPOSTなどHTTPメソッドを簡単に使い分けできます。キャンセル時の挙動を制御できます。サンプルではリクエストが完了した時にレスポンスを読み取ってファイルに保存しています。セットアップMavenを使用する場合は、pom.xmlに以下の依存性を追加してください。<version>4.5.10</version></dependency>特にプロジェクト管理ツールを使わない場合はより公式よりzipをダウンロードして、プロジェクトにjarを追加してください。TimeUnit.SECONDS);補足ホストが見つからない場合もファイルが見つからない場合も、FutureCallback#failedが呼ばれます。使う方法AsyncHttpClientライブラリにより、HTTP要求を簡単に実行しHTTP応答を非同期的に処理できます。コールバックを定義することで完了時にファイルを保存するよう制御できます。以下のサンプルでは、CompletableFutureを使用して、すべてのタスクが完了してからクライアントをクローズするようにしています。セットアップMavenを使用する場合は、pom.xmlに以下の依存性を追加してください。<version>2.10.4</version></dependency>特にプロジェクト管理ツールを使わない場合はMavenのCentralリポジトリよりjarをダウンロードしてください。});注意ファイルが存在しない場合でも、接続先のサーバがステータスコード404を返してくれるような場合はonCompleteが呼ばれます。処理の中で適当に扱う必要があります。HTTP_OK}ホスト自体が見つからない場合や応答がない場合はonCompleteは呼ばれません。応答なしを考慮してクライアント生成時にタイムアウトを設定したほうがよいでしょう。MEsasakiyuひ弱で優しい少年だったが、デーモンと合体。強大な力を得つつも人間の心を失わないデベルマンとなる。デベルマンURLからファイルをダウンロードするZip4jでzipファイルの展開/圧縮/暗号化を行うこのブログの中の人sasakiyu仙台在住、昭和生まれのシステムエンジニア。好きな言語はJava。嫌いな言語はCOBOL。カンファレンスに行った時に質疑ができるよう英語を習いたいと思っています。悪魔的な技術力が得られることを願って日々勉強してます。注意HOMEプログラミングJavaURLからファイルを非同期ダウンロードするJavaを中心に、今日から使えるプログラミングの小ネタや、便利なライブラリの使い方を解説しています。