注意:

Access restriction: The type FtpClient is not accessible due to restriction on required library F:\Program Files\Java\jre6\lib\rt.jar

sun.net包里的内容,在eclipse/myeclipse里默认是不让用的。解决办法是自定义access rules

工程上右键->工程属性->java builder path->Libraries标签,点击JRE System Library里面的Access rules,add sun/** 为accessible,如果该项存在,就edit。然后选择workspace default jre(jdk1.6.0_18)

package com.suma.exchange.ftp;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
import sun.net.TelnetInputStream;
import sun.net.TelnetOutputStream;
import sun.net.ftp.FtpClient;
       
/**   
 * ftp上传,下载   
 * @author why 2009-07-30   
 *   
 */    
public class FtpUtil {     
       
    private String ip = "";     
       
    private String username = "";     
       
    private String password = "";     
       
    private int port = -1;     
       
    private String path = "";     
       
    FtpClient ftpClient = null;     
       
    OutputStream os = null;     
       
    FileInputStream is = null;     
       
    public FtpUtil(String serverIP, String username, String password) {     
        this.ip = serverIP;     
        this.username = username;     
        this.password = password;     
    }     
            
    public FtpUtil(String serverIP, int port, String username, String password) {     
        this.ip = serverIP;     
        this.username = username;     
        this.password = password;     
        this.port = port;     
    }     
       
    /**   
     * 连接ftp服务器   
     *    
     * @throws IOException   
     */    
    public boolean connectServer(){     
        ftpClient = new FtpClient();     
        try {     
            if(this.port != -1){     
                    ftpClient.openServer(this.ip,this.port);     
            }else{     
                ftpClient.openServer(this.ip);     
            }     
            ftpClient.login(this.username, this.password);     
            if (this.path.length() != 0){     
                ftpClient.cd(this.path);// path是ftp服务下主目录的子目录                
            }     
            ftpClient.binary();// 用2进制上传、下载     
            System.out.println("已登录到\"" + ftpClient.pwd() + "\"目录");     
            return true;     
        }catch (IOException e){     
            e.printStackTrace();     
            return false;     
        }     
    }     
            
    /**   
     * 断开与ftp服务器连接   
     *    
     * @throws IOException   
     */    
    public boolean closeServer(){     
        try{     
            if (is != null) {     
                is.close();     
            }     
            if (os != null) {     
                os.close();     
            }     
            if (ftpClient != null) {     
                ftpClient.closeServer();     
            }     
            System.out.println("已从服务器断开");     
            return true;     
        }catch(IOException e){     
            e.printStackTrace();     
            return false;     
        }     
    }     
            
    /**   
     * 检查文件夹在当前目录下是否存在   
     * @param dir   
     * @return   
     */    
     private boolean isDirExist(String dir){     
         String pwd = "";     
         try {     
             pwd = ftpClient.pwd();     
             ftpClient.cd(dir);     
             ftpClient.cd(pwd);     
         }catch(Exception e){     
             return false;     
         }     
         return true;      
     }     
            
    /**   
     * 在当前目录下创建文件夹   
     * @param dir   
     * @return   
     * @throws Exception   
     */    
     private boolean createDir(String dir){     
         try{     
            ftpClient.ascii();     
            StringTokenizer s = new StringTokenizer(dir, "/"); //sign     
            s.countTokens();     
            String pathName = ftpClient.pwd();     
            while(s.hasMoreElements()){     
                pathName = pathName + "/" + (String) s.nextElement();     
                try {     
                    ftpClient.sendServer("MKD " + pathName + "\r\n");     
                } catch (Exception e) {     
                    e = null;     
                    return false;     
                }     
                ftpClient.readServerResponse();     
            }     
            ftpClient.binary();     
            return true;     
        }catch (IOException e1){     
            e1.printStackTrace();     
            return false;     
        }     
     }     
             
     /**   
      * ftp上传   
      * 如果服务器段已存在名为filename的文件夹,该文件夹中与要上传的文件夹中同名的文件将被替换   
      *    
      * @param filename 要上传的文件(或文件夹)名   
      * @return   
      * @throws Exception   
      */    
    public boolean upload(String filename){     
        String newname = "";     
        if(filename.indexOf("/") > -1){     
            newname = filename.substring(filename.lastIndexOf("/") + 1);     
        }else{     
            newname = filename;     
        }     
        return upload(filename, newname);     
    }     
             
     /**   
      * ftp上传   
      * 如果服务器段已存在名为newName的文件夹,该文件夹中与要上传的文件夹中同名的文件将被替换   
      *    
      * @param fileName 要上传的文件(或文件夹)名   
      * @param newName 服务器段要生成的文件(或文件夹)名   
      * @return   
      */    
     public boolean upload(String fileName, String newName){     
         try{     
             String savefilename = new String(fileName.getBytes("ISO-8859-1"), "GBK");      
             File file_in = new File(savefilename);//打开本地待长传的文件     
             if(!file_in.exists()){     
                 throw new Exception("此文件或文件夹[" + file_in.getName() + "]有误或不存在!");     
             }     
             if(file_in.isDirectory()){     
                 upload(file_in.getPath(),newName,ftpClient.pwd());     
             }else{     
                 uploadFile(file_in.getPath(),newName);     
             }     
                     
             if(is != null){     
                 is.close();     
             }     
             if(os != null){     
                 os.close();     
             }     
             return true;     
         }catch(Exception e){      
                e.printStackTrace();      
                System.err.println("Exception e in Ftp upload(): " + e.toString());      
                return false;     
         }finally{     
             try{     
                 if(is != null){     
                     is.close();     
                 }     
                 if(os != null){      
                     os.close();      
                 }     
             }catch(IOException e){     
                 e.printStackTrace();     
            }      
         }     
     }     
             
     /**   
      * 真正用于上传的方法   
      * @param fileName   
      * @param newName   
      * @param path   
      * @throws Exception   
      */    
     private void upload(String fileName, String newName,String path) throws Exception{     
             String savefilename = new String(fileName.getBytes("ISO-8859-1"), "GBK");      
             File file_in = new File(savefilename);//打开本地待长传的文件     
             if(!file_in.exists()){     
                 throw new Exception("此文件或文件夹[" + file_in.getName() + "]有误或不存在!");     
             }     
             if(file_in.isDirectory()){     
                 if(!isDirExist(newName)){     
                     createDir(newName);     
                 }     
                 ftpClient.cd(newName);     
                 File sourceFile[] = file_in.listFiles();     
                 for(int i = 0; i < sourceFile.length; i++){     
                     if(!sourceFile[i].exists()){     
                         continue;     
                     }     
                     if(sourceFile[i].isDirectory()){     
                         this.upload(sourceFile[i].getPath(),sourceFile[i].getName(),path+"/"+newName);     
                     }else{     
                         this.uploadFile(sourceFile[i].getPath(),sourceFile[i].getName());     
                      }     
                    }     
             }else{     
                 uploadFile(file_in.getPath(),newName);     
             }     
             ftpClient.cd(path);     
     }     
       
    /**   
     *  upload 上传文件   
     *    
     * @param filename 要上传的文件名   
     * @param newname 上传后的新文件名   
     * @return -1 文件不存在 >=0 成功上传,返回文件的大小   
     * @throws Exception   
     */    
    public long uploadFile(String filename, String newname) throws Exception{     
        long result = 0;     
        TelnetOutputStream os = null;     
        FileInputStream is = null;     
        try {     
            java.io.File file_in = new java.io.File(filename);     
            if(!file_in.exists())     
                return -1;     
            os = ftpClient.put(newname);     
            result = file_in.length();     
            is = new FileInputStream(file_in);     
            byte[] bytes = new byte[1024];     
            int c;     
            while((c = is.read(bytes)) != -1){     
                os.write(bytes, 0, c);     
            }     
        }finally{     
            if(is != null){     
                is.close();     
            }     
            if(os != null){     
                os.close();     
            }     
        }     
        return result;     
    }     
       
    /**   
     * 从ftp下载文件到本地   
     *    
     * @param filename 服务器上的文件名   
     * @param newfilename 本地生成的文件名   
     * @return   
     * @throws Exception   
     */    
    public long downloadFile(String filename, String newfilename){     
        long result = 0;     
        TelnetInputStream is = null;     
        FileOutputStream os = null;     
        try{     
            is = ftpClient.get(filename);     
            java.io.File outfile = new java.io.File(newfilename);     
            os = new FileOutputStream(outfile);     
            byte[] bytes = new byte[1024];     
            int c;     
            while ((c = is.read(bytes)) != -1) {     
                os.write(bytes, 0, c);     
                result = result + c;     
            }     
        }catch (IOException e){     
            e.printStackTrace();     
        }finally{     
            try {     
                if(is != null){     
                        is.close();     
                }     
                if(os != null){     
                    os.close();     
                }     
            } catch (IOException e) {     
                e.printStackTrace();     
            }     
        }     
        return result;     
    }     
       
    /**   
     * 取得相对于当前连接目录的某个目录下所有文件列表   
     *    
     * @param path   
     * @return   
     */    
    public List getFileList(String path){     
        List list = new ArrayList();     
        DataInputStream dis;     
        try {     
            dis = new DataInputStream(ftpClient.nameList(this.path + path));     
            String filename = "";     
            while((filename = dis.readLine()) != null){     
                list.add(filename);     
            }     
        } catch (IOException e) {     
            e.printStackTrace();     
        }     
        return list;     
    }     
       
            
       
    public static void main(String[] args){     
        FtpUtil ftp = new FtpUtil("133.224.202.2","tstbill","tstbill");     
        ftp.connectServer();     
        boolean result = ftp.upload("C:/test_why", "test_why/test");     
        System.out.println(result?"上传成功!":"上传失败!");     
        List list = ftp.getFileList("test_why/test");     
        for(int i=0;i