设为首页 加入收藏

TOP

Java断点续传(基于socket与RandomAccessFile的简单实现)(二)
2019-09-02 23:33:21 】 浏览:25
Tags:Java 断点 基于 socket RandomAccessFile 简单 实现
rogressBar(); //进度条 label = new JLabel(fileName + " 接收中"); contentPanel.add(label); progressbar.setOrientation(JProgressBar.HORIZONTAL); //进度条为水平 progressbar.setMinimum(0); //进度条最小值 progressbar.setMaximum(barSize); //进度条最大值 progressbar.setValue(barOffset); //进度条当前值 progressbar.setStringPainted(true); //显示进度条信息 progressbar.setPreferredSize(new Dimension(150, 20)); //进度条大小 progressbar.setBorderPainted(true); //为进度条绘制边框 progressbar.setBackground(Color.pink); //进度条颜色为骚粉 JButton cancel = new JButton("取消"); //取消按钮 JPanel barPanel = new JPanel(); barPanel.setLayout(new FlowLayout(FlowLayout.LEFT)); barPanel.add(progressbar); barPanel.add(cancel); contentPanel.add(barPanel); cancel.addActionListener(new cancelActionListener()); //为取消按钮注册监听器 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); rad.seek(size); //移动文件指针 //System.out.println("服务器:文件定位完成"); int length; byte[] bytes=new byte[1024]; while((length = dis.read(bytes, 0, bytes.length)) != -1){ rad.write(bytes,0, length); //写入文件 progressbar.setValue(++barOffset); //更新进度条(由于进度条每个单位代表大小为1kb,所以太小的文件就显示不出啦) } if (barOffset >= barSize) { //传输完成后的重命名 if(rad != null) rad.close(); if(!file.renameTo(new File(directory.getAbsolutePath() + File.separatorChar + fileName))) { file.delete(); //防御性处理删除临时文件 } //System.out.println("服务器:临时文件重命名完成"); } } catch (Exception e) { e.printStackTrace(); } finally { try { //关闭资源 if(rad != null) rad.close(); if(dis != null) dis.close(); if(dos != null) dos.close(); frame.dispose(); socket.close(); } catch (Exception e) {} } } class cancelActionListener implements ActionListener{ //取消按钮监听器 public void actionPerformed(ActionEvent e){ try { //System.out.println("服务器:接收取消"); if(dis != null) dis.close(); if(dos != null) dos.close(); if(rad != null) rad.close(); frame.dispose(); socket.close(); JOptionPane.showMessageDialog(frame, "已取消接收,连接关闭!", "提示:", JOptionPane.INFORMATION_MESSAGE); label.setText(" 取消接收,连接关闭"); } catch (IOException e1) { } } } } }

  客户端代码:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.net.Socket; 

public class FileTransferClient extends Socket {
 
    private static final String SERVER_IP = "127.0.0.1"; // 服务端IP
    private static final int SERVER_PORT = 8899; // 服务端端口
    private Socket client;
    private DataOutputStream dos;
    private DataInputStream dis;  
    private RandomAccessFile rad;  

    public FileTransferClient() throws Exception {
        super(SERVER_IP, SERVER_PORT);
        this.client = this;
        //System.out.println("客户端:成功连接服务端");
    }
    
    public void sendFile(String filePath, String targetPath) throws Exception {
        try {
            File file = new File(filePath);
            
            if(file.exists()) {
                dos = new DataOutputStream(client.getOutputStream());     //发送信息 getOutputStream方法会返回一个java.io.OutputStream对象
                dis = new DataInputStream(client.getInputStream());    //接收远程对象发送来的信息  get
首页 上一页 1 2 3 4 下一页 尾页 2/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Java基础学习-一切皆为对象 下一篇开发人员调度软件

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目