java 读取远程文件 实现继传。。。

本文介绍了一个使用Java实现的断点续传下载文件的方法,包括检查文件是否存在、确定已下载文件大小、设置HTTP请求头进行断点续传以及处理文件下载流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import java.io.BufferedInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.RandomAccessFile;
import java.net.HttpURLConnection;
import java.net.URL;

public class TestGetFile {

	private boolean FileExist(String pathAndFile)// 确定文件是否已经下载,但没有下载完成
	{
		File file = new File(pathAndFile);
		if (file.exists())
			return true;
		else
			return false;
	}
	
	private long FileSize(String pathAndFile)// 确定已经下载了的文件大小
	{
		File file = new File(pathAndFile);
		return file.length();
	}

	public static void main(String[] args) {
		
		TestGetFile tgf = new TestGetFile();
		URL url = null;
		HttpURLConnection ulc = null;
		DataOutputStream dos = null;
		BufferedInputStream bis = null;
		FileOutputStream fos = null;
		RandomAccessFile raFile = null;
		long TotalSize = 0;// 要下载的文件总大小
		long fileSize = 0; // 当前文件大小
		try {
			 url = new URL("http://www.baidu.com");
			 ulc = (HttpURLConnection)url.openConnection();
			 String fileName = "g:/text.txt";
			 TotalSize = Long.parseLong(ulc.getHeaderField("Content-Length"));
			 ulc.disconnect();// 先断开,下面再连接,否则下面会报已经连接的错误
			 ulc = (HttpURLConnection) url.openConnection();
			 
			 if(tgf.FileExist(fileName))
			 {
				 System.out.println("文件续传中...");
				 fileSize = tgf.FileSize(fileName);
				 ulc.setRequestProperty("RANGE", "bytes=" + fileSize + "-");
					// urlc.setRequestProperty("RANGE",
					// "bytes="+fileSize);//这样写不行,不能少了这个"-".
					// 设置接受信息
				 ulc.setRequestProperty(
									"Accept",
									"http://www.huomo.cn/developer/image/gif,image/x-xbitmap,application/msword,*/*");
				 raFile = new RandomAccessFile(fileName, "rw");// 随机方位读取
				 raFile.seek(fileSize);// 定位指针到fileSize位置
				 bis = new BufferedInputStream(ulc.getInputStream());
				 byte[] bt = new byte[1024]; 
				 int len = 0;
				 while(-1!=(len = bis.read(bt)))
				 {
					 raFile.write(bt, 0, len);
				 }
			 }
			 else
			 {
				 int len = 0;byte[] bt = new byte[1024]; 
				    fos = new FileOutputStream(fileName); // 没有下载完毕就将文件的扩展名命名.bak
					dos = new DataOutputStream(fos);
					bis = new BufferedInputStream(ulc.getInputStream());
					System.out.println("正在接收文件...");
					while ((len = bis.read(bt)) > 0)// 循环获取文件
					{
						dos.write(bt, 0, len);
					}
					 System.out.println("文件正常接收完毕!");
			 }
			 if (bis != null)
					bis.close();
			 if (dos != null)
					dos.close();
			 if (fos != null)
					fos.close();
			 if (raFile != null)
					raFile.close();
			 
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值