JavaでURLからファイルをダウンロードする

Javaプログラムがファイルをダウンロードする方法。

URL url = new URL("http://example.com/file.zip"); // ダウンロードする URL
URLConnection conn = url.openConnection();
InputStream in = conn.getInputStream();

File file = new File("c:\\download\\file.zip"); // 保存先
FileOutputStream out = new FileOutputStream(file, false);
int b;
while((b = in.read()) != -1){
    out.write(b);
}

out.close();
in.close();

今回はアプレットで動作確認したけど、サーブレットでもなんででも使えると思う。ただサーブレットとかだったらJakarta Commons HttpClientを使った方が簡単のはず。何でも自分で実装しなきゃいけない状況って、たぶんアプレットに多いんじゃないかと。

速くした

ダウンロード速度が遅かったので、速くした。

URL url = new URL("http://example.com/file.zip"); // ダウンロードする URL
URLConnection conn = url.openConnection();
InputStream in = conn.getInputStream();

File file = new File("c:\\download\\file.zip"); // 保存先
FileOutputStream out = new FileOutputStream(file, false);
byte[] bytes = new byte[512];
while(true){
    int ret = in.read(bytes);
    if(ret == 0) break;
    out.write(bytes, 0, ret);
}

out.close();
in.close();

512バイトずつダウンロードするようにした。真ん中のwhile文のあたりを修正しただけ。

bytes変数の宣言もwhileブロックの中に入れた方が美しいかな。使い回した方が速そうだけど。どうなんだろ。試してない。