2

HTTPサーバーからファイルをダウンロードするのに少し問題があります。以下のコードは、最大30MBのファイルのみをダウンロードします(ファイルサイズは52MBです)。私のブラウザは問題なくファイルをダウンロードします。なにが問題ですか?

URL website = new URL("http://www.website.com/information.asp");
ReadableByteChannel rbc = Channels.newChannel(website.openStream());
FileOutputStream fos = new FileOutputStream("information.html");
fos.getChannel().transferFrom(rbc, 0, 1 << 24);
4

2 に答える 2

5

FileChannel.transferFrom() Javaドキュメントには次のように書かれています。

指定された読み取り可能なバイトチャネルからこのチャネルのファイルにバイトを転送します。

ソースチャネルから最大カウントバイトを読み取り、指定された位置からこのチャネルのファイルに書き込もうとします。このメソッドを呼び出すと、要求されたすべてのバイトが転送される場合とされない場合があります。そうするかどうかは、チャネルの性質と状態によって異なります。ソースチャネルの残りのバイト数がcount未満の場合、またはソースチャネルが非ブロッキングであり、入力バッファですぐに使用できるバイト数がcount未満の場合、要求されたバイト数よりも少ないバイト数が転送されます。

URL website = new URL("http://www.website.com/information.asp");
URLConnection connection = website.openConnection();
ReadableByteChannel rbc = Channels.newChannel( connection.getInputStream());
FileOutputStream fos = new FileOutputStream("information.html" );
long expectedSize = connection.getContentLength();
System.out.println( "Expected size: " + expectedSize );
long transferedSize = 0L;
while( transferedSize < expectedSize ) {
   transferedSize +=
      fos.getChannel().transferFrom( rbc, transferedSize, 1 << 24 );
   System.out.println( transferedSize + " bytes received" );
}
fos.close();
于 2013-02-16T14:15:43.387 に答える
0
        try {

        InputStream inputStream = url.openStream();
        ReadableByteChannel rbc = Channels.newChannel(inputStream);
        FileOutputStream fos = new FileOutputStream("your-pc-path");

        fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
        inputStream.close();

    } catch (Exception e) {
        e.printStackTrace();
    }
于 2016-07-29T06:26:53.930 に答える