关键点:
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();
}
}