⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 reconnftp.java

📁 一个ftp客户端程序
💻 JAVA
字号:
package reconnftp;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import sun.net.ftp.*;
import sun.net.*;
import java.io.*;

/**
 * <p>Title: </p>
 * <p>Description: </p>
 * <p>Copyright: Copyright (c) 2004</p>
 * <p>Company: </p>
 * @author not attributable
 * @version 1.0
 */

public class ReConnFtp
    extends JFrame
    implements Runnable {
  JPanel contentPane;
  JLabel jLabel1 = new JLabel();
  JTextField jTextField1 = new JTextField();
  JLabel jLabel2 = new JLabel();
  JTextField jTextField2 = new JTextField();
  JLabel jLabel3 = new JLabel();
  JButton jButton1 = new JButton();
  JScrollPane jScrollPane1 = new JScrollPane();
  JTextArea jTextArea1 = new JTextArea();
  JLabel jLabel4 = new JLabel();
  JButton jButton2 = new JButton();

  FtpClient ftpClient;
  JPasswordField jPasswordField1 = new JPasswordField();
  JLabel jLabel5 = new JLabel();
  JTextField jTextField4 = new JTextField();
  JLabel jLabel6 = new JLabel();
  JTextField jTextField5 = new JTextField();
  JButton jButton4 = new JButton();
  JButton jButton3 = new JButton();

  boolean conn = true; //判断线程是否结束

  //Construct the frame
  public ReConnFtp() {
    enableEvents(AWTEvent.WINDOW_EVENT_MASK);
    try {
      jbInit();
    }
    catch (Exception e) {
      e.printStackTrace();
    }
  }

  //Component initialization
  private void jbInit() throws Exception {
    contentPane = (JPanel)this.getContentPane();
    jLabel1.setText("主机名");
    jLabel1.setBounds(new Rectangle(13, 19, 39, 21));
    contentPane.setLayout(null);
    this.setSize(new Dimension(402, 347));
    this.setTitle("FTP客户端");
    jTextField1.setSelectionStart(11);
    jTextField1.setText("");
    jTextField1.setBounds(new Rectangle(52, 19, 120, 21));
    jLabel2.setText("用户名");
    jLabel2.setBounds(new Rectangle(187, 19, 38, 21));
    jTextField2.setText("");
    jTextField2.setBounds(new Rectangle(226, 19, 65, 21));
    jLabel3.setText("密码");
    jLabel3.setBounds(new Rectangle(293, 19, 32, 21));
    jButton1.setBounds(new Rectangle(73, 51, 64, 20));
    jButton1.setMargin(new Insets(2, 1, 2, 1));
    jButton1.setText("连  接");
    jButton1.addActionListener(new ReConnFtp_jButton1_actionAdapter(this));
    jScrollPane1.setBounds(new Rectangle(14, 86, 370, 168));
    jTextArea1.setText("");
    jTextArea1.setTabSize(8);
    jLabel4.setText("");
    jLabel4.setBounds(new Rectangle(15, 293, 388, 24));
    jButton2.setText("断  开");
    jButton2.addActionListener(new ReConnFtp_jButton2_actionAdapter(this));
    jButton2.setMargin(new Insets(2, 1, 2, 1));
    jButton2.setBounds(new Rectangle(170, 51, 64, 20));
    jButton2.setEnabled(false);
    jPasswordField1.setText("");
    jPasswordField1.setBounds(new Rectangle(322, 19, 60, 21));
    jPasswordField1.addKeyListener(new ReConnFtp_jPasswordField1_keyAdapter(this));
    jLabel5.setRequestFocusEnabled(true);
    jLabel5.setText("下载文件名");
    jLabel5.setBounds(new Rectangle(13, 266, 61, 21));
    jTextField4.setText("");
    jTextField4.setBounds(new Rectangle(72, 266, 81, 21));
    jLabel6.setText("文件目录");
    jLabel6.setBounds(new Rectangle(166, 266, 50, 21));
    jTextField5.setText("");
    jTextField5.setBounds(new Rectangle(223, 266, 97, 21));
    jButton4.setBounds(new Rectangle(328, 266, 54, 21));
    jButton4.setEnabled(false);
    jButton4.setMargin(new Insets(2, 1, 2, 1));
    jButton4.setText("下  载");
    jButton4.addActionListener(new ReConnFtp_jButton4_actionAdapter(this));
    jButton3.addActionListener(new ReConnFtp_jButton3_actionAdapter(this));
    jButton3.setText("退  出");
    jButton3.addActionListener(new ReConnFtp_jButton3_actionAdapter(this));
    jButton3.setMargin(new Insets(2, 1, 2, 1));
    jButton3.setBounds(new Rectangle(266, 51, 64, 20));
    contentPane.add(jLabel1, null);
    contentPane.add(jTextField1, null);
    contentPane.add(jScrollPane1, null);
    contentPane.add(jLabel5, null);
    contentPane.add(jTextField5, null);
    contentPane.add(jButton4, null);
    contentPane.add(jTextField4, null);
    contentPane.add(jLabel4, null);
    contentPane.add(jLabel6, null);
    contentPane.add(jTextField2, null);
    contentPane.add(jLabel2, null);
    contentPane.add(jLabel3, null);
    contentPane.add(jPasswordField1, null);
    contentPane.add(jButton2, null);
    contentPane.add(jButton1, null);
    contentPane.add(jButton3, null);
    jScrollPane1.getViewport().add(jTextArea1, null);

  }

  //Overridden so we can exit when window is closed
  protected void processWindowEvent(WindowEvent e) {
    super.processWindowEvent(e);
    if (e.getID() == WindowEvent.WINDOW_CLOSING) {
      System.exit(0);
    }
  }

  void linkFtp() { //连接FTP
    String host = jTextField1.getText();
    try {
      jLabel4.setText("正在连接,请等待......");
      ftpClient = new FtpClient(host);
      ftpClient.login(jTextField2.getText(), jPasswordField1.getText()); //登录FTP服务器
      ftpClient.binary(); //文件以二进制传输
      showFtp(ftpClient); //显示FTP的内容
    }
    catch (FtpLoginException e) {
      jLabel4.setText("用户名密码错误,请重新输入密码!");
    }
    catch (IOException e) {
      jLabel4.setText("连接主机:" + host + "失败!");
      conn = true;
      Thread t = new Thread(this); //创建线程
      t.start(); //启动线程
    }
    catch (SecurityException e) {
      jLabel4.setText("无权限与主机:" + host + "连接!");
    }
    jLabel4.setText("连接成功!");
    jButton1.setEnabled(false); //将“连接”按钮设置为不可用
    jButton2.setEnabled(true); //将“断开”按钮设置为可用
    jButton4.setEnabled(true);
  }

  void showFtp(FtpClient ftp) { //显示FTP的内容
    int i;
    StringBuffer strBuf = new StringBuffer(); //建立字符缓冲区
    TelnetInputStream in;
    try {
      in = ftp.list();
      while ( (i = in.read()) >= 0) {
        strBuf.append( (char) i); //将ftp对象的数据逐字加入到strBuf中
      }
      jTextArea1.setText(strBuf.toString()); //设置显示区域的内容
      in.close();
    }
    catch (Exception e) {
      jLabel4.setText("错误:" + e);
    }
  }

  void jButton1_actionPerformed(ActionEvent e) {
    linkFtp();
  }

  void jPasswordField1_keyPressed(KeyEvent e) {
    if (e.getKeyChar() == KeyEvent.VK_ENTER) {
      linkFtp();
    }
  }

  void jButton2_actionPerformed(ActionEvent e) {
    try {
      ftpClient.closeServer();
      jTextArea1.setText("");
      jLabel4.setText("断开连接");
      jTextField1.setText("");
      jTextField2.setText("");
      jTextField2.setText("");
      jPasswordField1.setText("");
    }
    catch (Exception err) {
      jLabel4.setText("错误:" + err);
    }
    jButton1.setEnabled(true);
    jButton2.setEnabled(false);
    jButton4.setEnabled(false);
  }

  void jButton4_actionPerformed(ActionEvent e) {
    int i;
    StringBuffer strBuf = new StringBuffer();
    try {
      File dir = new File(jTextField5.getText()); //获取保存文件的目录
      File file = new File(dir, jTextField4.getText()); //构造一个文件对象
      RandomAccessFile raf = new RandomAccessFile(file, "w"); //构造一个可写的随机访问文件
      InputStream in = ftpClient.get(jTextField4.getText()); //构造一个选定文件的输入流
      while ( (i = in.read()) >= 0) {
        strBuf.append(i); //复制输入流
      }
      raf.writeBytes(strBuf.toString()); //将缓冲区内的字符写入文件
      raf.close(); //关闭
    }
    catch (Exception e1) {
      System.out.println("错误:" + e1);
    }
  }

  void jButton3_actionPerformed(ActionEvent e) {
    System.exit(0);
  }

  public void run() {
    /**@todo Implement this java.lang.Runnable method*/
    while (conn) {
      try {
        Thread.sleep(5000);
        linkFtp();
      }
      catch (InterruptedException e) {
        jLabel5.setText("错误:" + e);
      }
    }
  }

}

class ReConnFtp_jButton1_actionAdapter
    implements java.awt.event.ActionListener {
  ReConnFtp adaptee;

  ReConnFtp_jButton1_actionAdapter(ReConnFtp adaptee) {
    this.adaptee = adaptee;
  }

  public void actionPerformed(ActionEvent e) {
    adaptee.jButton1_actionPerformed(e);
  }
}

class ReConnFtp_jPasswordField1_keyAdapter
    extends java.awt.event.KeyAdapter {
  ReConnFtp adaptee;

  ReConnFtp_jPasswordField1_keyAdapter(ReConnFtp adaptee) {
    this.adaptee = adaptee;
  }

  public void keyPressed(KeyEvent e) {
    adaptee.jPasswordField1_keyPressed(e);
  }
}

class ReConnFtp_jButton2_actionAdapter
    implements java.awt.event.ActionListener {
  ReConnFtp adaptee;

  ReConnFtp_jButton2_actionAdapter(ReConnFtp adaptee) {
    this.adaptee = adaptee;
  }

  public void actionPerformed(ActionEvent e) {
    adaptee.jButton2_actionPerformed(e);
  }
}

class ReConnFtp_jButton4_actionAdapter
    implements java.awt.event.ActionListener {
  ReConnFtp adaptee;

  ReConnFtp_jButton4_actionAdapter(ReConnFtp adaptee) {
    this.adaptee = adaptee;
  }

  public void actionPerformed(ActionEvent e) {
    adaptee.jButton4_actionPerformed(e);
  }
}

class ReConnFtp_jButton3_actionAdapter
    implements java.awt.event.ActionListener {
  ReConnFtp adaptee;

  ReConnFtp_jButton3_actionAdapter(ReConnFtp adaptee) {
    this.adaptee = adaptee;
  }

  public void actionPerformed(ActionEvent e) {
    adaptee.jButton3_actionPerformed(e);
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -