我做一个文件下载的东西,想在文件下载的过程中能通过“暂停”按钮暂停文件下载,“继续”按钮继续未下载完的文件,请问高手怎么实现啊.(也是怎么实现断点续传)

解决方案 »

  1.   

    下面是我的代码:
    下载端:
     try{
      File file = new File(filesavePath); //filesavePath 本地保存路径
      file.createNewFile();
      RandomAccessFile raf = new RandomAccessFile(file, "rw");
      // 通过Socket连接文件服务器
      Socket server = new Socket(serverIP, 8880);  //ServerIP 对方IP
      
      PrintWriter outtosocket=new PrintWriter(server.getOutputStream());;
      
      outtosocket.println(downfilemessage);
      outtosocket.flush();
      
      
      //  创建网络接受流接受服务器文件数据 
      InputStream netIn = server.getInputStream();
      InputStream in = new DataInputStream(new BufferedInputStream(netIn));
      //创建缓冲区缓冲网络数据
      byte[] buf = new byte[20480];
      
      int num = in.read(buf);
      while (num != (-1)) {//是否读完所有数据
       raf.write(buf, 0, num);//将数据写往文件
       raf.skipBytes(num);//顺序写文件字节
       num = in.read(buf);//继续从网络中读取文件
      }
      in.close();
      raf.close();
      
      
      
      
      
      }   catch(IOException q){
       System.out.println("异常");
       
      }     
      

  2.   

    下传端:


       try{
        //创建网络服务器接受客户请求
        ServerSocket ss = new ServerSocket(8880);
        System.out.println("打开下传");
        
        Socket client = ss.accept();
        
        BufferedReader inputfromsocket=new BufferedReader(new InputStreamReader(client.getInputStream()));
      
       File file = new File(sharefilemessage);          //sharefilemessage 本地要下传的文件
        FileInputStream fos = new FileInputStream(file);
       
        //创建网络输出流并提供数据包装器
        OutputStream netOut = client.getOutputStream();
        OutputStream doc = new DataOutputStream(
          new BufferedOutputStream(netOut));
        //创建文件读取缓冲区
        byte[] buf = new byte[20480];
        int num = fos.read(buf);//读文件
        while (num != (-1)) {//是否读完文件
         doc.write(buf, 0, num);//把文件数据写出网络缓冲区
         doc.flush();//刷新缓冲区把数据写往客户端
         num = fos.read(buf);//继续从文件中读取数据
       }
        fos.close();
        doc.close();
       }
    catch(IOException e1){
    System.out.print("异常");
    }
    多谢各位高手帮忙了
      

  3.   

    IO流中,有个设置起始标志的,你去看一下API
      

  4.   

                                       
     下面这段是我触发“下载”按钮时执行的代码
                                                 File file = new File(filesavePath);
    if(!file.exists()){
    System.out.println("文件不存在,创建");
    file.createNewFile();} Socket server = new Socket(serverIP, 8880);
    RandomAccessFile raf = new RandomAccessFile(file, "rw");
    // 通过Socket连接文件服务器 PrintWriter outtosocket = new PrintWriter(server
    .getOutputStream());
    ; outtosocket.println(downfilemessage);
    outtosocket.flush();
    InputStream netIn = server.getInputStream();
    InputStream in = new DataInputStream(
    new BufferedInputStream(netIn));
    //创建缓冲区缓冲网络数据


    byte[] buf = new byte[20480];

    in.skip(downedsize);                   //跳过已下载的部分从断点出开始下载
    int num = in.read(buf);
    while (num != (-1)&&isStop!=true)   //isStop初始化为false,当我触发“暂停”按钮时执行isStop=true; 我想通过判断isStop的值来中断下载流。
                                           
                                                 
                                                  {
    raf.write(buf, 0, num);
    raf.skipBytes(num);


    num = in.read(buf);//继续从网络中读取文件
    }


    if(isStop==true){                 
                                                          //当暂停后,将isStop重置为false。并获得已下载文件的大小downedsize,作为断点
    isStop=false;
    System.out.println("已暂停");
            downedsize=in.available();
    System.out.println("已传送了:"+downedsize);

    }

    in.close();
    raf.close();
    server.close(); }              
                             //问题是运行的时候发现 我触发“暂停”按钮根本不起作用,文件一直到下载结束。麻烦大哥帮帮忙看看问题出在哪了
      

  5.   

    这段代码本身似乎没有什么问题,只要你的“暂停”按钮将isStop置为true即可,
    所以,要看你的暂停按钮事件是怎么处理的?
      

  6.   

    是啊,暂停事件我就写了一行代码~就是 isStop=true 。但是下载仍然继续~我是先触发“下载”事件,再触发“暂停”事件,难道暂停对下载事件没影响么~isStop我是设为全局变量的,并初始化为false