• 断点续传


    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);  
          }
  • 相关阅读:
    监听 view 初始化时
    动画 帧动画
    Android Studio 修改jar包中的.class代码
    ScrollView 滚动条
    SpannableString 设置文字中的颜色 链接
    onActivityResult 解耦 不需要一层一层的写
    滚动 Scroller OverScroller
    startActivity 新开一个Activity
    Fragment java.lang.IllegalStateException 生命周期
    jenkins 基于docker部署springboot项目详细步骤
  • 原文地址:https://www.cnblogs.com/tzzt01/p/8099389.html
Copyright © 2020-2023  润新知