这是一个文件传输的客户端程序。下面是每一句代码的含义:

  1. package 文件传送器;

声明文件所在的包名。

  1. import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.net.Socket; import javax.swing.JButton; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JTextField;

导入需要使用的类。

  1. public class FileTransferClient extends JFrame {

定义一个名为 FileTransferClient 的类,继承自 JFrame 类。

  1. private static final long serialVersionUID = 1L;

定义一个序列化 ID。

  1. private static final String SERVER_IP = "10.41.104.29"; // 服务端IP private static final int SERVER_PORT = 8899; // 服务端端口

定义服务器的 IP 地址和端口号。

  1. private Socket client; private FileInputStream fis; private DataOutputStream dos;

声明客户端的 Socket、FileInputStream 和 DataOutputStream 对象。

  1. private JPanel panel; private JTextField textField; private JButton chooseButton; private JButton sendButton;

声明客户端的面板、文本框和两个按钮。

  1. public FileTransferClient() {

定义 FileTransferClient 类的构造方法。

  1. super("文件传送Client端"); setDefaultCloseOperation(EXIT_ON_CLOSE); setSize(400, 100);

调用 JFrame 类的构造方法,设置标题、关闭操作和窗口大小。

  1. panel = new JPanel(); textField = new JTextField(20); chooseButton = new JButton("选择文件"); sendButton = new JButton("发送文件");

创建面板、文本框和两个按钮。

  1. chooseButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { JFileChooser fileChooser = new JFileChooser(); int result = fileChooser.showOpenDialog(panel); if (result == JFileChooser.APPROVE_OPTION) { File file = fileChooser.getSelectedFile(); textField.setText(file.getAbsolutePath()); } } });

为选择文件按钮添加 ActionListener,实现选择文件的功能。

  1. sendButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { try { String fileName = textField.getText(); if (fileName.isEmpty()) { JOptionPane.showMessageDialog(panel, "请选择要发送的文件"); return; } File file = new File(fileName); if (!file.exists()) { JOptionPane.showMessageDialog(panel, "文件不存在,请重新选择"); return; } client = new Socket(SERVER_IP, SERVER_PORT); fis = new FileInputStream(file); dos = new DataOutputStream(client.getOutputStream());

        // 文件名和长度
        dos.writeUTF(file.getName());
        dos.flush();
        dos.writeLong(file.length());
        dos.flush();
    
        // 开始传输文件
        System.out.println("======== 开始传输文件 ========");
        byte[] bytes = new byte[1024];
        int length = 0;
        long progress = 0;
        while ((length = fis.read(bytes, 0, bytes.length)) != -1) {
            dos.write(bytes, 0, length);
            dos.flush();
            progress += length;
            System.out.print("| " + (100 * progress / file.length()) + "% |");
        }
        System.out.println();
        System.out.println("======== 文件传输成功 ========");
    } catch (Exception ex) {
        ex.printStackTrace();
    } finally {
        try {
            if (fis != null)
                fis.close();
            if (dos != null)
                dos.close();
            if (client != null)
                client.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
    

    } });

为发送文件按钮添加 ActionListener,实现发送文件的功能。

  1. panel.add(textField); panel.add(chooseButton); panel.add(sendButton); add(panel, BorderLayout.CENTER); setVisible(true);

将文本框和两个按钮添加到面板中,将面板添加到 JFrame 中,并显示 JFrame。

  1. public static void main(String[] args) { new FileTransferClient(); }

定义程序的入口,创建 FileTransferClient 类的对象

解释一下代码每一句的含义:package 文件传送器;import javaawtBorderLayout;import javaawteventActionEvent;import javaawteventActionListener;import javaioDataOutputStream;import javaioFile;import javaioFileInputStream;impo

原文地址: https://www.cveoy.top/t/topic/flVH 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录