www.pudn.com > networktools.rar > FtpClientFrame.java
package ftpclient;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import sun.net.ftp.*;
import sun.net.*;
import java.io.*;
public class FtpClientFrame extends JFrame {
JPanel contentPane;
Label labelPrompt = new Label(); // 状态提示
Label labelHost = new Label();
TextField textFieldHost = new TextField(); // 主机地址
Label labelUser = new Label();
TextField textFieldUser = new TextField(); // 用户名
Label labelPassword = new Label();
TextField textFieldPassword = new TextField(); // 密码
Button buttonLink = new Button(); // 连接按钮
Button buttonDisconnect = new Button(); // 断开按钮
Label labelFileShow = new Label();
TextArea textAreaContent = new TextArea(); // 显示文件和目录的文本域
Label labelFile = new Label();
TextField textFieldFile = new TextField(); // 要下载的文件名输入框
Label labelDir = new Label();
TextField textFieldDir = new TextField(); // 保存文件的本机目录名
Button buttonDownload = new Button(); // 下载按钮
FtpClient myFtp = null; // FtpClient对象
TelnetInputStream inStream = null; // 输入流对象
public FtpClientFrame() { // 构造函数
try {
jbInit(); // 界面初始化并显示
}
catch(Exception e) {
e.printStackTrace();
}
}
// 界面初始化并显示
private void jbInit() throws Exception {
contentPane = (JPanel) this.getContentPane();
contentPane.setLayout(null);
labelPrompt.setBounds(new Rectangle(25, 6, 180, 22));
labelHost.setText("主机名:");
labelHost.setBounds(new Rectangle(25, 38, 50, 22));
textFieldHost.setBounds(new Rectangle(78, 38, 280, 22));
labelUser.setText("用户名:");
labelUser.setBounds(new Rectangle(25, 70, 50, 22));
textFieldUser.setBounds(new Rectangle(78, 70, 114, 22));
labelPassword.setText("密码:");
labelPassword.setBounds(new Rectangle(205, 70, 37, 22));
textFieldPassword.setBounds(new Rectangle(244, 70, 114, 22));
textFieldPassword.setEchoChar('*');
buttonLink.setLabel("连接");
buttonLink.setBounds(new Rectangle(375, 38, 70, 22));
buttonLink.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
buttonLink_actionPerformed(e);
}
});
buttonLink.setEnabled(true);
buttonDisconnect.setLabel("断开");
buttonDisconnect.setBounds(new Rectangle(375, 70, 70, 22));
buttonDisconnect.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
buttonDisconnect_actionPerformed(e);
}
});
buttonDisconnect.setEnabled(false);
labelFileShow.setText("目录列表");
labelFileShow.setBounds(new Rectangle(25, 105, 140, 22));
textAreaContent.setBounds(new Rectangle(25, 135, 420, 235));
textAreaContent.setEditable(false);
labelFile.setText("欲下载的文件名:");
labelFile.setBounds(new Rectangle(25, 380, 100, 22));
textFieldFile.setBounds(new Rectangle(128, 380, 230, 22));
labelDir.setText("存放文件的路径:");
labelDir.setBounds(new Rectangle(25, 412, 100, 22));
textFieldDir.setBounds(new Rectangle(128, 412, 230, 22));
buttonDownload.setLabel("下载");
buttonDownload.setBounds(new Rectangle(375, 412, 70, 22));
buttonDownload.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
buttonDownload_actionPerformed(e);
}
});
buttonDownload.setEnabled(false);
contentPane.add(labelPrompt, null);
contentPane.add(labelHost, null);
contentPane.add(textFieldHost, null);
contentPane.add(labelUser, null);
contentPane.add(textFieldUser, null);
contentPane.add(labelPassword, null);
contentPane.add(textFieldPassword, null);
contentPane.add(buttonLink, null);
contentPane.add(buttonDisconnect, null);
contentPane.add(labelFileShow, null);
contentPane.add(textAreaContent, null);
contentPane.add(textFieldFile, null);
contentPane.add(labelFile, null);
contentPane.add(labelDir, null);
contentPane.add(textFieldDir, null);
contentPane.add(buttonDownload, null);
enableEvents(AWTEvent.WINDOW_EVENT_MASK);
this.setSize(new Dimension(480, 485));
this.setResizable(false);
this.setTitle("ftp客户端");
this.setVisible(true);
}
// 响应“连接”按钮的点击消息,连接到服务器端
void buttonLink_actionPerformed(ActionEvent e) {
String hostname = textFieldHost.getText();
labelPrompt.setText("正在连接,请等待.....");
try {
myFtp = new FtpClient(hostname); // 构造一个对象
myFtp.login(textFieldUser.getText(), textFieldPassword.getText()); // 以给定用户名和密码登录
myFtp.binary(); // 表示文件以二进制模式传输
showFileContents(); // 列出服务器端当前目录下的目录和文件名
}
catch(FtpLoginException e1) {
String strPrompt = "用户名密码错误";
labelPrompt.setText(strPrompt);
}
catch (IOException e1) {
String strPrompt = "连接主机:" + hostname + "失败!";
labelPrompt.setText(strPrompt);
}
catch(SecurityException e1) {
String strPrompt = "无权限与主机:" + hostname + "连接!";
labelPrompt.setText(strPrompt);
}
labelPrompt.setText("连接主机:"+textFieldHost.getText()+"成功!");
buttonDisconnect.setEnabled(true);
buttonDownload.setEnabled(true);
buttonLink.setEnabled(false);
}
// 响应“断开”按钮的点击消息,连接到服务器端
void buttonDisconnect_actionPerformed(ActionEvent e) {
try {
myFtp.closeServer(); // 关闭与服务器端的连接
textAreaContent.setText("");
labelPrompt.setText("与主机断开连接");
}
catch(IOException e1) {
System.out.println("Error: " + e1);
}
buttonLink.setEnabled(true);
buttonDownload.setEnabled(false);
buttonDisconnect.setEnabled(false);
}
// 列出服务器端当前目录下的目录和文件名
public void showFileContents() {
int ch;
StringBuffer buf = new StringBuffer();
try {
inStream= myFtp.list(); // 得到主机端当前目录下所有文件和目录的输入数据流
while ((ch=inStream.read())>=0) { // 从输入流中读取数据
buf.append((char)ch); // 保存数据到缓冲区
}
textAreaContent.append(buf.toString()); // 将目录和文件名显示在文本框中
inStream.close(); // 关闭输入流
}
catch(Exception e) {
System.out.println("Error: " + e);
}
}
// 响应“断开”按钮的点击消息,连接到服务器端
void buttonDownload_actionPerformed(ActionEvent e) {
int ch;
StringBuffer buf = new StringBuffer();
buf.setLength(0);
try {
File dir = new File(textFieldDir.getText()); // 通过路径构造文件
File f = new File(dir, textFieldFile.getText()); // 通过路径和文件名构造一个文件
RandomAccessFile file = new RandomAccessFile(f, "rw"); // 构造一个随机访问文件
inStream = myFtp.get(textFieldFile.getText()); // 得到所选文件的输入流
while((ch = inStream.read())>=0) { // 读取数据流
buf.append((char)ch); // 将读取的数据存在缓冲区中
}
file.writeBytes(buf.toString()); // 将缓冲区中的数据以字符串形式写入文件
file.close(); // 关闭文件
JOptionPane msg = new JOptionPane(); // 提示对话框
JOptionPane.showMessageDialog(FtpClientFrame.this, "下载成功", "下载成功!", 1);
}
catch(Exception e1) {
System.out.println("Error: " + e1);
}
}
// 关闭窗口
protected void processWindowEvent(WindowEvent e) {
super.processWindowEvent(e);
if (e.getID() == WindowEvent.WINDOW_CLOSING) {
try {
if(inStream != null)
inStream.close();
}
catch(IOException e1) {
System.out.println("Error: " + e1);
}
System.exit(0);
}
}
// 主函数
public static void main(String[] args) {
new FtpClientFrame();
}
}