java nio 断点续传

public class HttpDownLoadFile {
    public static void main(String[] args) throws IOException {
        DefaultHttpClient defaultHttpClient = new DefaultHttpClient();
        HttpGet httpGet = new HttpGet("http://localhost/lizicheng.zip");
        HttpParams httpParams = httpGet.getParams();
        File out = new File("lizicheng2.zip");
        if (!out.exists()) {

            out.createNewFile();

        }
        RandomAccessFile rf = null;

        rf = new RandomAccessFile(out, "rws");
        long len = rf.length();
        System.out.println("FileLength=" + rf.length());
        rf.close();

        FileOutputStream fo = new FileOutputStream(out, true);

        WritableByteChannel fc = Channels.newChannel(fo);
        ByteBuffer bf = ByteBuffer.allocate(1024 * 100);

        httpGet.setHeader("RANGE", "bytes=" + len + "-");
        try {
            HttpResponse r = defaultHttpClient.execute(httpGet);
            int code = r.getStatusLine().getStatusCode();
            Header[] headers = r.getAllHeaders();
            if (code == 200 || code == 206) {

                InputStream in = r.getEntity().getContent();
                BufferedInputStream bin = new BufferedInputStream(in);
                ReadableByteChannel inc = Channels.newChannel(bin);
                int i = 1;
                while (inc.read(bf) != -1) {
                    bf.flip();
                    fc.write(bf);
                    bf.compact();
                    if (i++ > 20) {
                        break;
                    }
                }
                bf.flip();
                while (bf.hasRemaining())
                    fc.write(bf);

                bin.close();
            }
            fc.close();

        } catch (ClientProtocolException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值