📄 reconnftp.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 + -