简单的FTP上传下载(java实现 swing界面)

时间:2023-01-27 10:16:04

/**
*阅读前请自己在win7上建立FTP主机
*具体步骤如:http://jingyan.baidu.com/article/574c5219d466c36c8d9dc138.html
* 然后将以下FTP,username,password分别改成你的FTP ip地址 用户名 密码即可(红色代码部分)
* 本例子用了apche的commons-net-3.3.jar以方便FTP的访问 请在网上下载然后手动buid -path添加
* 待完成版 刷新按钮 登录 都还没有做 而且上传 下载 完成后都需要重新运行
* 2014-05-07 
* **/

 

一共3个类 Frame_Main为主函数 图形界面  ButtonColumn是下载键的类 最后一个是FTP服务类

简单的FTP上传下载(java实现 swing界面)

 

  1 import java.awt.EventQueue;
  2 
  3 import javax.swing.JFrame;
  4 import java.awt.BorderLayout;
  5 import javax.swing.JTable;
  6 import javax.swing.border.BevelBorder;
  7 import javax.swing.JFileChooser;
  8 import javax.swing.JScrollPane;
  9 import javax.swing.JTextField;
 10 import javax.swing.JButton;
 11 import javax.swing.JRadioButton;
 12 import javax.swing.JTextArea;
 13 import javax.swing.JLabel;
 14 import java.awt.event.ActionListener;
 15 import java.awt.event.ActionEvent;
 16 import java.awt.Color;
 17 import java.awt.Font;
 18 import javax.swing.SwingConstants;
 19 import javax.swing.UIManager;
 20 import java.awt.Toolkit;
 21 import javax.swing.table.DefaultTableModel;
 22 import javax.swing.border.CompoundBorder;
 23 import javax.swing.border.LineBorder;
 24 import javax.swing.filechooser.FileSystemView;
 25 import javax.swing.JScrollBar;
 26 
 27 import org.apache.commons.net.ftp.FTPFile;
 28 
 29 import java.awt.ScrollPane;
 30 import java.awt.Label;
 31 import java.io.File;
 32 import java.io.IOException;
 33 import java.util.ArrayList;
 34 import java.util.Date;
 35 import java.util.Vector;
 36 import java.awt.Scrollbar;
 37 
 38 public class Frame_Main implements ActionListener{
 39 
 40     
 41     //初始化参数--------------------------------
 42         static FTPFile[] file;
 43         static String FTP="192.168.1.86";
 44         static String username="huanglizhe";
 45         static String password="123456";
 46     //初始化参数--------------------------------
 47     
 48     
 49     private JFrame frame;
 50     private JTable table;
 51     static Ftp_by_apache ftp;
 52     public static Ftp_by_apache getFtp() {
 53         return ftp;
 54     }
 55     
 56     /**
 57      * Launch the application.
 58      */
 59     public static void main(String[] args) {
 60         
 61          ftp=new Ftp_by_apache(FTP,username,password);
 62          file=ftp.getAllFile();
 63         
 64         
 65         
 66         EventQueue.invokeLater(new Runnable() {
 67             public void run() {
 68                 try {
 69                     Frame_Main window = new Frame_Main();
 70                     window.frame.setVisible(true);
 71                 } catch (Exception e) {
 72                     e.printStackTrace();
 73                 }
 74             }
 75         });
 76         
 77     }
 78 
 79     /**
 80      * Create the application.
 81      */
 82     public Frame_Main() {
 83         initialize();
 84     }
 85 
 86     /**
 87      * Initialize the contents of the frame.
 88      */
 89     private void initialize() {
 90         frame = new JFrame();
 91         frame.setIconImage(Toolkit.getDefaultToolkit().getImage(Frame_Main.class.getResource("/com/sun/java/swing/plaf/windows/icons/UpFolder.gif")));
 92         frame.setTitle("FTP");
 93         frame.setBounds(100, 100, 470, 534);
 94         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 95         frame.getContentPane().setLayout(null);
 96         
 97         //上传按钮--------------------------------------------------
 98         JButton upload = new JButton("\u4E0A\u4F20");
 99         upload.setFont(new Font("宋体", Font.PLAIN, 12));
100         upload.setBackground(UIManager.getColor("Button.highlight"));
101         upload.addActionListener(new ActionListener() {
102             public void actionPerformed(ActionEvent arg0) {
103                 //上传点击按钮触发------------------------------------
104                 System.out.println("上传!!!!!");
105                 int result = 0;  
106                 File file = null;  
107                 String path = null;  
108                 JFileChooser fileChooser = new JFileChooser();  
109                 FileSystemView fsv = FileSystemView.getFileSystemView(); 
110                 System.out.println(fsv.getHomeDirectory());                //得到桌面路径  
111                 fileChooser.setCurrentDirectory(fsv.getHomeDirectory());  
112                 fileChooser.setDialogTitle("请选择要上传的文件...");  
113                 fileChooser.setApproveButtonText("确定");  
114                 fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);  
115                 result = fileChooser.showOpenDialog(null);  
116                 if (JFileChooser.APPROVE_OPTION == result) {  
117                     path=fileChooser.getSelectedFile().getPath();  
118                     System.out.println("path: "+path);
119                     try {
120                         //下载
121                         ftp.upload(path);
122                     } catch (IOException e1) {
123                         // TODO Auto-generated catch block
124                         e1.printStackTrace();
125                     }
126                     finally{
127                         
128                         ftp.close_connection();
129                     }
130                     } 
131                 //上传点击按钮触发------------------------------------
132             }
133         });
134         upload.setBounds(195, 15, 82, 23);
135         frame.getContentPane().add(upload);
136         //上传按钮--------------------------------------------------
137         
138         
139         
140         //刷新按钮--------------------------------------------------
141         JButton refresh = new JButton("\u5237\u65B0");
142         refresh.addActionListener(new ActionListener() {
143             public void actionPerformed(ActionEvent arg0) {
144             }
145         });
146         refresh.setFont(new Font("宋体", Font.PLAIN, 12));
147         refresh.setBackground(UIManager.getColor("Button.highlight"));
148         refresh.setBounds(312, 15, 82, 23);
149         frame.getContentPane().add(refresh);
150         //刷新按钮--------------------------------------------------
151         
152         
153         
154         //显示基本信息(FTP username)-----------------------------------------------
155         JLabel lblNewLabel = new JLabel("FTP\u5730\u5740");
156         lblNewLabel.setBounds(32, 10, 54, 15);
157         frame.getContentPane().add(lblNewLabel);
158         
159         JLabel lblNewLabel_1 = new JLabel("\u7528\u6237\u540D");
160         lblNewLabel_1.setBounds(32, 35, 54, 15);
161         frame.getContentPane().add(lblNewLabel_1);
162         
163         JLabel address = new JLabel(FTP);
164         address.setBounds(110, 10, 75, 15);
165         frame.getContentPane().add(address);
166         
167         JLabel name = new JLabel(username);
168         name.setBounds(110, 35, 82, 15);
169         frame.getContentPane().add(name);
170         //显示基本信息-----------------------------------------------
171         
172         
173         //table数据初始化  从FTP读取所有文件
174         String[][] data1=new String[file.length][4];
175          for(int row=0;row<file.length;row++)
176          {
177              
178                  data1[row][0]=file[row].getName();
179                  if(file[row].isDirectory())
180                     {
181                      data1[row][1]="文件夹";
182                     }
183                     else if(file[row].isFile()){
184                         String[] geshi=file[row].getName().split("\\.");
185                         data1[row][1]=geshi[1];    
186                     }
187                  data1[row][2]=file[row].getSize()+"";
188                  data1[row][3]="下载";
189          } 
190          
191         
192         
193         //table列名-----------------------------------------------------
194         String[] columnNames = {"文件", "文件类型", "文件大小(字节)", ""  };  
195         DefaultTableModel model = new DefaultTableModel();
196         model.setDataVector(data1, columnNames);
197         
198         //加滚动条--------------------------------------------------------
199         JScrollPane scrollPane = new JScrollPane();
200         scrollPane.setBounds(32, 73, 362, 384);
201         frame.getContentPane().add(scrollPane);
202           //加滚动条-----------------------------------------------------
203           
204         //table功能------------------------------------------------------
205         table = new JTable(model);
206         scrollPane.setViewportView(table);
207         table.setColumnSelectionAllowed(true);
208         table.setCellSelectionEnabled(true);
209         table.setFont(new Font("微软雅黑", Font.PLAIN, 12));
210         table.setBorder(new LineBorder(new Color(0, 0, 0)));
211         table.setToolTipText("\u53EF\u4EE5\u70B9\u51FB\u4E0B\u8F7D");
212         
213          //table button初始化(最后一列的按键)--------------------    
214         ButtonColumn buttonsColumn = new ButtonColumn(table, 3);
215       
216     }
217 
218     @Override
219     public void actionPerformed(ActionEvent arg0) {
220         // TODO Auto-generated method stub
221         
222     }
223 }

 

ButtonColumn类 主要实现下载按钮

  1   
  2 import java.awt.Component;  
  3 import java.awt.event.ActionEvent;  
  4 import java.awt.event.ActionListener;  
  5 import java.io.File;
  6 import java.io.IOException;
  7   
  8 import javax.swing.AbstractCellEditor;  
  9 import javax.swing.JButton;  
 10 import javax.swing.JFileChooser;
 11 import javax.swing.JTable;  
 12 import javax.swing.UIManager;  
 13 import javax.swing.filechooser.FileSystemView;
 14 import javax.swing.table.TableCellEditor;  
 15 import javax.swing.table.TableCellRenderer;  
 16 import javax.swing.table.TableColumnModel;  
 17 
 18 import org.apache.commons.net.ftp.FTPFile;
 19   
 20 public class ButtonColumn extends AbstractCellEditor implements  
 21         TableCellRenderer, TableCellEditor, ActionListener {  
 22     JTable table;  
 23     JButton renderButton;  
 24     JButton editButton;  
 25     String text;  
 26   
 27     public ButtonColumn(JTable table, int column) {  
 28         super();  
 29         this.table = table;  
 30         renderButton = new JButton();  
 31         editButton = new JButton();  
 32         editButton.setFocusPainted(false);  
 33         editButton.addActionListener(this);  
 34   
 35         TableColumnModel columnModel = table.getColumnModel();  
 36         columnModel.getColumn(column).setCellRenderer(this);  
 37         columnModel.getColumn(column).setCellEditor(this);  
 38     }  
 39   
 40     public Component getTableCellRendererComponent(JTable table, Object value,  
 41             boolean isSelected, boolean hasFocus, int row, int column) {  
 42         if (hasFocus) {  
 43             renderButton.setForeground(table.getForeground());  
 44             renderButton.setBackground(UIManager.getColor("Button.background"));  
 45         } else if (isSelected) {  
 46             renderButton.setForeground(table.getSelectionForeground());  
 47             renderButton.setBackground(table.getSelectionBackground());  
 48         } else {  
 49             renderButton.setForeground(table.getForeground());  
 50             renderButton.setBackground(UIManager.getColor("Button.background"));  
 51         }  
 52   
 53         renderButton.setText((value == null) ? " " : value.toString());  
 54         return renderButton;  
 55     }  
 56   
 57     public Component getTableCellEditorComponent(JTable table, Object value,  
 58             boolean isSelected, int row, int column) {  
 59         text = (value == null) ? " " : value.toString();  
 60         editButton.setText(text);  
 61         return editButton;  
 62     }  
 63   
 64     public Object getCellEditorValue() {  
 65         return text;  
 66     }  
 67   
 68     public void actionPerformed(ActionEvent e) {  
 69         fireEditingStopped();  
 70 //        System.out.println(e.getActionCommand() + "   :    "  
 71 //                + table.getSelectedRow()); 
 72         FTPFile[]  file1=Frame_Main.getFtp().getAllFile();
 73         String from_file_name=file1[table.getSelectedRow()].getName();
 74         int result = 0;  
 75         File file = null;  
 76         String path = null;  
 77         JFileChooser fileChooser = new JFileChooser();  
 78         FileSystemView fsv = FileSystemView.getFileSystemView();
 79         fsv.createFileObject(from_file_name);
 80         //System.out.println(fsv.getHomeDirectory());  
 81         fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
 82         //fileChooser.setCurrentDirectory(new File(from_file_name));  
 83         fileChooser.setDialogTitle("另存为:");  
 84         //fileChooser.setApproveButtonText("保存");   
 85         result = fileChooser.showSaveDialog(null);
 86         if (JFileChooser.APPROVE_OPTION == result) {  
 87             path=fileChooser.getSelectedFile().getPath()+"\\"; //加"\\"是为了防止在桌面的时候C:destop最后没有\ 
 88             System.out.println("path: "+path);
 89             System.out.println("from_file_name:"+from_file_name);
 90             try {
 91                 Frame_Main.getFtp().download(from_file_name, path);
 92                 System.out.println("下载成功! ");
 93 
 94             } catch (IOException e1) {
 95                 // TODO Auto-generated catch block
 96                 e1.printStackTrace();
 97             }
 98             finally{
 99                 
100                 Frame_Main.getFtp().close_connection();
101             }
102             } 
103              
104     }  
105  
106     }

 

Ftp_by_apache服务类 主要实现连接 上传 下载 注销功能

  1 package com.huang.ftp;
  2 import java.io.FileInputStream;
  3 import java.io.FileNotFoundException;
  4 import java.io.FileOutputStream;
  5 import java.io.IOException;
  6 import java.io.InputStream;
  7 import java.io.OutputStream;
  8 
  9 import javax.imageio.stream.FileImageInputStream;
 10 
 11 import org.apache.commons.net.*; 
 12 import org.apache.commons.net.ftp.FTPClient;
 13 import org.apache.commons.net.ftp.FTPFile;
 14 
 15 
 16 public class Ftp_by_apache {
 17     
 18     
 19     FTPClient f=null;
 20     //默认构造函数
 21     public Ftp_by_apache(String url,String username,String password)
 22     {
 23         f=new FTPClient();
 24         //得到连接
 25         this.get_connection(url,username,password);
 26         
 27         
 28         
 29         
 30     }
 31     
 32     
 33     //连接服务器方法
 34     public void get_connection(String url,String username,String password){
 35         
 36     
 37         try {
 38             //连接指定服务器,默认端口为21  
 39             f.connect(url);
 40             System.out.println("connect success!");
 41             
 42             //设置链接编码,windows主机UTF-8会乱码,需要使用GBK或gb2312编码  
 43             f.setControlEncoding("GBK");
 44             
 45             //登录
 46             boolean login=f.login(username, password);
 47             if(login)
 48                 System.out.println("登录成功!");
 49             else
 50                 System.out.println("登录失败!");
 51         
 52         }
 53         catch (IOException e) {
 54             
 55             e.printStackTrace();
 56         }
 57         
 58         
 59     }    
 60     
 61     public void close_connection() {
 62         
 63          boolean logout=false;
 64         try {
 65             logout = f.logout();
 66         } catch (IOException e1) {
 67             // TODO Auto-generated catch block
 68             e1.printStackTrace();
 69         }  
 70          if (logout) {  
 71              System.out.println("注销成功!");  
 72          } else {  
 73              System.out.println("注销失败!");  
 74          }  
 75         
 76         if(f.isConnected())
 77             try {
 78                 System.out.println("关闭连接!");
 79                 f.disconnect();
 80             } catch (IOException e) {
 81             
 82                 e.printStackTrace();
 83             }
 84         
 85     }
 86     
 87     
 88     //获取所有文件和文件夹的名字
 89     public FTPFile[] getAllFile(){
 90         
 91         
 92         FTPFile[] files = null;
 93         try {
 94             files = f.listFiles();
 95         } catch (IOException e) {
 96             // TODO Auto-generated catch block
 97             e.printStackTrace();
 98         }
 99         
100         for(FTPFile file:files)
101         {
102             
103 //            if(file.isDirectory())
104 //                System.out.println(file.getName()+"是文件夹");
105 //            if(file.isFile())
106 //                System.out.println(file.getName()+"是文件");
107         }
108         return files;
109         
110     }
111     
112     
113     //生成InputStream用于上传本地文件  
114     public void upload(String File_path) throws IOException{
115         
116         InputStream input=null;
117         String[] File_name = null;
118         try {
119             input = new FileInputStream(File_path);
120             File_name=File_path.split("\\\\");
121             System.out.println(File_name[File_name.length-1]);
122         } catch (FileNotFoundException e) {
123             // TODO Auto-generated catch block
124             e.printStackTrace();
125         }
126         
127          //上传文件  
128         System.out.println(File_name[File_name.length-1]);
129         f.storeFile(File_name[File_name.length-1], input);
130         System.out.println("上传成功!");
131         
132         if(input!=null)
133         input.close();
134         
135         
136         
137     }
138     
139     
140     //下载 from_file_name是下载的文件名,to_path是下载到的路径地址
141     public void download(String from_file_name,String to_path) throws IOException{
142         
143         
144         
145         OutputStream output=null;
146         try {
147             output = new FileOutputStream(to_path+from_file_name);
148         } catch (FileNotFoundException e) {
149             // TODO Auto-generated catch block
150             e.printStackTrace();
151         }
152         f.retrieveFile(from_file_name, output);
153         if(output!=null)
154         {
155             try {
156                 if(output!=null)
157                 output.close();
158             } catch (IOException e) {
159                 // TODO Auto-generated catch block
160                 e.printStackTrace();
161             }
162         }
163         
164         
165     }
166             
167     
168         
169 
170     
171     
172     
173 }

 

 

运行结果:

1、连接

 简单的FTP上传下载(java实现 swing界面)

简单的FTP上传下载(java实现 swing界面)

 

 

 

 

2、上传

 

 简单的FTP上传下载(java实现 swing界面)

简单的FTP上传下载(java实现 swing界面)

简单的FTP上传下载(java实现 swing界面)

简单的FTP上传下载(java实现 swing界面)

 

 

 

 

 

 

 

 

 

3)下载

 

 简单的FTP上传下载(java实现 swing界面)

简单的FTP上传下载(java实现 swing界面)