java断点续传

关键点:

1、java.io.RandomAccessFile

RandomAccessFile fos = new RandomAccessFile(file, "rw");
fos.seek(start);

2、java.net.HttpURLConnection

HttpURLConnection urlConn = (HttpURLConnection)url.openConnection();
urlConn.setRequestProperty("Range", "bytes=" + start + "-"+ max);

其他协议应该是类似的。

例子如下:

package t;

import java.io.File;
import java.io.InputStream;
import java.io.RandomAccessFile;
import java.net.HttpURLConnection;
import java.net.URL;

public class T {

	/**
	 * @param args
	 * @throws Exception 
	 */
	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		
		int buffer_size = 4096;
		
		URL url = new URL("http://10.32.148.160/test.txt");
		File file = new File("D:/test.txt.tmp");
		int start = 0;
		RandomAccessFile fos = new RandomAccessFile(file, "rw");
		if(file.exists()) {
			start = (int)file.length();
			fos.seek(start);
			System.out.println(start);
		}
		HttpURLConnection urlConn = (HttpURLConnection)url.openConnection();
		
		int max = urlConn.getContentLength();
		System.out.println("max:" + max);
		urlConn.disconnect();
		urlConn = (HttpURLConnection)url.openConnection();
		urlConn.setRequestProperty("Range", "bytes=" + start + "-"+ max);
		
		System.out.println("contentLength:" + urlConn.getContentLength());
		
		if(urlConn.getContentLength() > 0) {
			InputStream in = urlConn.getInputStream();
			byte[] buffer = new byte[buffer_size];
			int length = 0;
			if((length = in.read(buffer)) > 0) {
				fos.write(buffer, 0, length);
				fos.close();
				if(length < buffer_size)
					file.renameTo(new File("D:/test.txt"));
			}
			in.close();
		} else {
			fos.close();
			file.renameTo(new File("D:/test.txt"));
		}
		urlConn.disconnect();
	}

}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值