java下载文件
来源:互联网 发布:管家婆端口设置 编辑:程序博客网 时间:2024/05/16 16:09
- public GetRemoteFile_Client_GoOn(){
- 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();
- }
- private void FileRename(String fName,String nName){//将下载完全的文件更名,去掉.tp名
- File file = new File(fName);
- file.renameTo(new File(nName));
- file.delete();
- }
- public static void main(String[] args){
- URL url = null;
- HttpURLConnection urlc = null;
- DataOutputStream dos = null;
- BufferedInputStream bis = null;
- FileOutputStream fos = null;
- String localFile = "d:\\XunXian_V2.0.21.1_dl.exe";//文件保存的地方及文件名,具体情况可以改
- String localFile_bak = localFile + ".tp";//未下载完文件加.tp扩展名,以便于区别
- GetRemoteFile_Client_GoOn gco = new GetRemoteFile_Client_GoOn();
- long fileSize = 0;
- long start = System.currentTimeMillis();
- int len = 0;
- byte[] bt = new byte[1024];
- RandomAccessFile raFile=null;
- long TotalSize=0;//要下载的文件总大小
- try{
- url = new URL("http://down.qq.com/xunxian/full/XunXian_V2.0.21.1_dl.exe");
- urlc = (HttpURLConnection) url.openConnection();
- TotalSize=Long.parseLong(urlc.getHeaderField("Content-Length"));
- System.out.println("下载文件大小为:"+TotalSize);
- // urlc.disconnect();//先断开,下面再连接,否则下面会报已经连接的错误
- urlc = (HttpURLConnection) url.openConnection();
- //确定文件是否存在
- if (gco.FileExist(localFile_bak)){//采用断点续传,这里的依据是看下载文件是否在本地有.tp有扩展名同名文件
- System.out.println("文件续传中...");
- fileSize = gco.FileSize(localFile_bak); //取得文件在小,以便确定随机写入的位置
- System.out.println("fileSize:"+fileSize);
- //设置User-Agent
- //urlc.setRequestProperty("User-Agent","NetFox");
- //设置断点续传的开始位置
- urlc.setRequestProperty("RANGE", "bytes="+fileSize+"-");
- //urlc.setRequestProperty("RANGE", "bytes="+fileSize);//这样写不行,不能少了这个"-".
- //设置接受信息
- urlc.setRequestProperty("Accept","image/gif,image/x-xbitmap,application/msword,*/*");
- raFile=new RandomAccessFile(localFile_bak,"rw");//随机方位读取
- raFile.seek(fileSize);//定位指针到fileSize位置
- bis = new BufferedInputStream(urlc.getInputStream());
- while ((len = bis.read(bt)) > 0){//循环获取文件
- raFile.write(bt, 0, len);
- }
- System.out.println("文件续传接收完毕!");
- }
- else{//采用原始下载
- fos = new FileOutputStream(localFile_bak); //没有下载完毕就将文件的扩展名命名.bak
- dos = new DataOutputStream(fos);
- bis = new BufferedInputStream(urlc.getInputStream());
- System.out.println("正在接收文件...");
- int test=0;
- while ((len = bis.read(bt)) > 0){//循环获取文件
- dos.write(bt, 0, len);
- test++;
- }
- }
- System.out.println("共用时:" +
- (System.currentTimeMillis() - start) / 1000);
- if(bis!=null)
- bis.close();
- if(dos!=null)
- dos.close();
- if(fos!=null)
- fos.close();
- if(raFile!=null)
- raFile.close();
- System.out.println("localFile_bak:"+gco.FileSize(localFile_bak));
- if(gco.FileSize(localFile_bak)==TotalSize){//下载完毕后,将文件重命名
- gco.FileRename(localFile_bak,localFile);
- }
- System.exit(0);
- }
- catch (Exception e){
- try{
- if(bis!=null)
- bis.close();
- if(dos!=null)
- dos.close();
- if(fos!=null)
- fos.close();
- if(raFile!=null)
- raFile.close();
- }
- catch (IOException f){
- f.printStackTrace();
- }
- e.printStackTrace();
- }
- System.exit(0);
- }
0 0
- java下载文件
- java 文件下载
- java 文件下载
- java下载文件
- java实现文件下载
- java 文件下载
- Java文件下载
- Java 网络文件下载
- java文件下载
- java 文件下载疑问
- java 文件下载 详解
- java文件下载
- Java 下载文件
- java 下载文件
- Java文件下载相关
- 文件下载(java) android
- java 文件下载
- java 文件下载
- Android Gallery效果
- 机器视觉开源处理库汇总
- STM32 USB HID的GET_REPORT 与 SET_REPORT请求
- C语言 - printf的占位符(%) 异常
- linux c 之signal 和sigaction区别 (转载)
- java下载文件
- VC++ 产生error MSB6006的错误解决方法
- Android 带清除功能的输入框控件ClearEditText,仿IOS的输入框
- 云南警方称翻版“我爸是李刚”当事人未放狠话
- 用DELPHI 开发压缩、解压、自解压、加密
- 安卓4.1系统7寸大彩屏考勤终端
- 文件结构“图”
- 获取设备唯一标识
- 自己就是用户