📄 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(); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -