2011-01-15 14 views
5

私はループメソッドながら、数バイト以下この方法試してみた:Javaでファイルをダウンロードするには?

try { 
    URL dl = null; 
    dl = new URL("http://ds-forums.com/kyle-tests/uploads/Screenshots.zip"); 
    ReadableByteChannel rbc = Channels.newChannel(dl.openStream()); 
    FileOutputStream fos = new FileOutputStream(fileName + "Screenshots.zip"); 
    fos.getChannel().transferFrom(rbc, 0, 1 << 24); 
    System.out.println(fos.getChannel().size()); 
    fos.close(); 
    rbc.close(); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 

}

をしかし、方法はただ速い/非常に効率的ではありません。私はApacheのUtilsと私が使用していることを知った

IOUtils.copy(new URL("http://ds-forums.com/kyle-tests/uploads/Screenshots.zip").openStream(), new FileOutputStream(System.getProperty("user.home").replace("\\", "/") + "/Desktop/Screenshots.zip")); 

これは最善の方法ですか?私は非常に混乱しています。どの方法が圧縮されたファイル26MBをダウンロードするのに最適です。 (上のファイルは1MBしかありません)メソッドをテストしています

他の誰かがこの問題に遭遇したかどうかを知りたいと思っています。ありがとう。

+0

複数のスレッドでファイルをダウンロードすることをお勧めします。 jDownloaderのソースコードを見てください。 – fardjad

答えて

21

すでに

org.apache.commons.io.FileUtils.copyURLToFile(URL, File) 

を使用し、クラスパスにCommonsのIOを持っている場合には開閉のすべてのストリームのハウスキーピングの世話をすると、ファイルの親にmkdirsを呼び出します。

関連する問題