首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 如何用java获取网络文件的大小 [已结贴,结贴人:java2000_net]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-04-25 21:16:07 楼主
    如题
    还有就是如何用多线程序下载文件
    最好有代码解释
    20  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-04-25 21:32:071楼 得分:1
    dream!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-04-26 11:53:042楼 得分:0
    public   void   saveToFile(String   destUrl,   String   fileName)   throws   IOException  
    {
            FileOutputStream   fos   =   null;
            BufferedInputStream   bis   =   null;
            HttpURLConnection   httpUrl   =   null;
            URL   url   =   null;
            byte[]   buf   =   new   byte[BUFFER_SIZE];
            int   size   =   0;
            int   s=0;
            //建立链接
          url   =   new   URL(destUrl);
            httpUrl   =   (HttpURLConnection)   url.openConnection();
            //连接指定的资源
            httpUrl.connect();
            //获取网络输入流
            bis   =   new   BufferedInputStream(httpUrl.getInputStream());
            //建立文件
            fos   =   new   FileOutputStream(fileName);
           
    System.out.println( "正在获取链接[ "   +   destUrl   +   "]的内容...\n将其保存为文件[ "   +   fileName   +   "] ");
            //保存文件
            while   (   (size   =   bis.read(buf))   !=   -1)  
            {
            fos.write(buf,   0,   size);
            //++s;
            System.out.println(size);
            //System.out.println(s/1024+ "M ");
            }
               
            fos.close();
            bis.close();
            httpUrl.disconnect();
        }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-04-26 11:55:323楼 得分:0
    这是我使用的下载方法
    但不知道怎样去识别网络文件的大小,也就无法使用多线程
    还不知有别的方法没有,请各位大虾赐教
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-04-26 12:07:394楼 得分:1
    mark~
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-04-26 12:17:275楼 得分:1
    String   length   =   httpUrl.getHeaderField( "Content-Length ");     //获取文件长度
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-04-27 09:03:556楼 得分:0
    请问一下Content-Length这是什么字段   获得文件信息的其它方法是什么?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zouxinfox
    • 等级:
    发表于:2007-04-27 09:22:557楼 得分:1
    我写的多线程文件下载程序
    public   class   DownloadNetTest   {  
          private   File   fileOut;  
          private   URL   url;  
          private   long   fileLength=0;  
          //初始化线程数  
          private   int   ThreadNum=5;  

          public   DownloadNetTest(){  
          try{  
                System.out.println( "正在链接URL ");  
                url=new   URL( "http://211.64.201.201/uploadfile/nyz.mp3 ");  
                HttpURLConnection   urlcon=(HttpURLConnection)url.openConnection();  
                //根据响应获取文件大小
                fileLength=urlcon.getContentLength();  
                if(urlcon.getResponseCode()> =400){  
                System.out.println( "服务器响应错误 ");  
                System.exit(-1);  
                }  
                if(fileLength <=0)  
                System.out.println( "无法获知文件大小 ");  
                //打印信息  
                printMIME(urlcon);  
                System.out.println( "文件大小为 "+fileLength/1024+ "K ");  
                //获取文件名  
                String   trueurl=urlcon.getURL().toString();  
                String   filename=trueurl.substring(trueurl.lastIndexOf( '/ ')+1);  
                fileOut=new   File( "D:// ",filename);  
          }  
          catch(MalformedURLException   e){  
                System.err.println(e);  
          }  
          catch(IOException   e){  
                System.err.println(e);  
          }  
          init();  
    }  
          private   void   init(){  
                DownloadNetThread   []   down=new   DownloadNetThread[ThreadNum];  
          try   {  
                for(int   i=0;i <ThreadNum;i++){  
                      RandomAccessFile   randOut=new   RandomAccessFile(fileOut, "rw ");  
                      randOut.setLength(fileLength);  
                      long   block=fileLength/ThreadNum+1;  
                      randOut.seek(block*i);  
                      down[i]=new   DownloadNetThread(url,randOut,block,i+1);  
                      down[i].setPriority(7);  
                      down[i].start();  
                }  
          //循环判断是否下载完毕  
          boolean   flag=true;  
          while   (flag)   {  
                Thread.sleep(500);  
                flag   =   false;  
                for   (int   i   =   0;   i   <   ThreadNum;   i++)  
                if   (!down[i].isFinished())   {  
                flag   =   true;  
                break;  
                }  
        }//   end   while  
          System.out.println( "文件下载完毕,保存在 "+fileOut.getPath()   );
          }   catch   (FileNotFoundException   e)   {  
                      System.err.println(e);  
                      e.printStackTrace();  
          }  
          catch(IOException   e){  
                System.err.println(e);  
                e.printStackTrace();  
          }  
          catch   (InterruptedException   e)   {  
          System.err.println(e);  
          }  

    }  
    private   void   printMIME(HttpURLConnection   http){  
          for(int   i=0;;i++){  
          String   mine=http.getHeaderField(i);  
          if(mine==null)  
          return;  
          System.out.println(http.getHeaderFieldKey(i)+ ": "+mine);  
          }  
    }  

    public   static   void   main(String[]   args)   {  
                  DownloadNetTest   app=new   DownloadNetTest();  
    }  

    }  


    //线程类
    public   class   DownloadNetThread   extends   Thread{  
    private   InputStream   randIn;  
    private   RandomAccessFile   randOut;  
    private   URL   url;  
    private   long   block;  
    private   int   threadId=-1;  
    private   boolean   done=false;  

          public   DownloadNetThread(URL   url,RandomAccessFile   out,long   block,int   threadId){  
          this.url=url;  
          this.randOut=out;  
          this.block=block;  
          this.threadId=threadId;  
    }  
      public   void   run(){  
          try{  
                HttpURLConnection   http=(HttpURLConnection)url.openConnection();  
                http.setRequestProperty( "Range ", "bytes= "+block*(threadId-1)+ "- ");  
                randIn=http.getInputStream();  
          }  
          catch(IOException   e){  
                System.err.println(e);  
          }  

          ////////////////////////  
          byte   []   buffer=new   byte[1024];  
          int   offset=0;  
          long   localSize=0;  
          System.out.println( "线程 "+threadId+ "开始下载 ");  
          try   {  
                while   ((offset   =   randIn.read(buffer))   !=   -1&&localSize <=block)   {  
                randOut.write(buffer,0,offset);  
                localSize+=offset;  
                }  
                randOut.close();  
                randIn.close();  
                done=true;  
                System.out.println( "线程 "+threadId+ "完成下载 ");  
                this.interrupt();  
          }  
          catch(Exception   e){  
                System.err.println(e);  
          }  
    }  
        public   boolean   isFinished(){  
              return   done;  
        }  
    }

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-04-27 10:04:548楼 得分:1
    不懂
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-04-27 12:57:529楼 得分:1
    收集一下!!呵呵   谢谢啦
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-04-27 23:12:1710楼 得分:1
    不懂   只能顶了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-04-28 10:29:3411楼 得分:1
    晕,还是顶一下
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-04-28 10:50:4512楼 得分:0
    该回复于2008-08-01 00:29:46被管理员或版主删除
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-04-28 11:22:1713楼 得分:1
    markq
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-04-28 11:34:5214楼 得分:1
    mark
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-04-30 10:29:4315楼 得分:0
    同胞们,同志们,本贴严禁灌水呀,本贴不需要你的的 "顶 ", "mark ", "dream "之类话,希望你们来这里的目的,不是一味的 "顶 ", "mark ", "dream ".请谅解
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-05-03 10:51:4016楼 得分:1
    下去学了~~
    谢谢
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-05-03 23:05:1217楼 得分:1
    冒昧问一句,你们写的程序写个PUBLIC   SATAIC   VOID   MAIN就能运行么?还需要导入什么包?
    说实话我是头一次看见纯JAVA网络应用,每句差不多都能看懂可是确实没想到写个网络下载就这么简单~~~领教了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-05-03 23:52:1018楼 得分:1
    都是下载程序,怎么没有获取文件大小的程序?估计也不会有吧,因为JAVA是以流的形式处理文件的
    最多只能看缓冲里文件的大小
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zouxinfox
    • 等级:
    发表于:2007-05-04 08:36:3019楼 得分:0
    楼上的没有看懂程序,获取文件大小是通过协议实现的。
    fileLength=urlcon.getContentLength();就可以获得文件大小,这是http协议里的一个字段,只是java封装好了,不用你亲自去读这些字段。建议去看一看http协议。
         
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-05-05 13:59:5720楼 得分:0
    上面的方式是不可以实现断点续传的,想请教解决办法?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-05-10 12:07:3421楼 得分:1
    mark
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-05-22 10:09:2022楼 得分:1
    厉害值得学习!~~
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-05-22 14:50:3123楼 得分:1
    up
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-05-27 23:54:3124楼 得分:1
    需求不清楚,服务器端是否运行程序?客户端与服务器采用何种通讯协议?这些问题先要设定才能进一步讨论。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-06-11 12:05:2625楼 得分:1
    ~~~   强呀,实在忍不住要回复了!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-06-11 16:07:5326楼 得分:1
    情不自禁的回复,可以拿回去学习!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-06-11 16:26:5527楼 得分:1
    学习,运行了一下,通过并下载了这个mp3文件,佩服厉害!!!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-12-13 21:27:4628楼 得分:0
    mark
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-12-13 22:28:1529楼 得分:0
    刚试了一下,不错
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-12-15 22:39:1930楼 得分:0
    该回复于2007-12-20 14:06:24被版主删除
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-12-22 01:23:4931楼 得分:0
    我用了测量文件大小的方法,真不错!
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved