java ftp客戶端

清华大佬耗费三个月吐血整理的几百G的资源,免费分享!....>>>

apache commons-net可以很方便的实现,但是这个第三方包中对文件夹的删除与创建(级联)操作并不是特别的方便。删除文件夹必须保证该文件夹下没有任何 文件,创建文件夹也必须要求父文件夹存在。为了方便以后使用方便,对其进行了简单的封装,主要针对删除与文件夹创建。代码如下:
    package cn.androiddevelop.io;  
      
    import java.io.FileInputStream;  
    import java.io.FileOutputStream;  
    import java.io.IOException;  
    import java.net.SocketException;  
      
    import org.apache.commons.net.ftp.FTP;  
    import org.apache.commons.net.ftp.FTPClient;  
    import org.apache.commons.net.ftp.FTPFile;  
      
    /** 
     * ftp客户端 
     *  
     * @author Yuedong Li 
     *  
     */  
    public class FtpClient {  
        private FTPClient client;  
      
        public FtpClient(String host, String userName, String password)  
                throws SocketException, IOException {  
            initFtpClient(host, 21, userName, password);  
        }  
      
        public FtpClient(String host, int port, String userName, String password)  
                throws SocketException, IOException {  
            initFtpClient(host, port, userName, password);  
        }  
      
        /** 
         * 登录 
         *  
         * @param host 
         * @param port 
         * @param userName 
         * @param password 
         * @throws SocketException 
         * @throws IOException 
         */  
        public void initFtpClient(String host, int port, String userName,  
                String password) throws SocketException, IOException {  
            client = new FTPClient();  
            client.connect(host, port);  
            client.login(userName, password);  
        }  
      
        /** 
         * 得到所有目录 
         *  
         * @param remotePath 
         * @return 
         * @throws IOException 
         */  
        public FTPFile[] listFiles(String remotePath) throws IOException {  
            if (client == null)  
                return null;  
            client.changeWorkingDirectory(remotePath);  
            return client.listFiles();  
        }  
      
        /** 
         * 上传 
         *  
         * @param localPath 
         *            本地路径 
         * @param remotePath 
         *            ftp路径 
         * @return 上传是否成功 
         * @throws IOException 
         */  
        public boolean upload(String localPath, String remotePath)  
                throws IOException {  
            if (client == null)  
                return false;  
            boolean res = false;  
            FileInputStream fileInputStream = new FileInputStream(localPath);  
            int index = remotePath.lastIndexOf('/');  
            if (index != -1) {  
                client.setFileType(FTP.BINARY_FILE_TYPE);  
                client.changeWorkingDirectory(remotePath.substring(0, index));  
                res = client.storeFile(remotePath.substring(index + 1),  
                        fileInputStream);  
            }  
            fileInputStream.close();  
            return res;  
        }  
      
        /** 
         * 下载 
         *  
         * @param remotePath 
         *            ftp路径 
         * @param localPath 
         *            本地路径 
         * @return 下载是否成功 
         * @throws IOException 
         */  
        public boolean download(String remotePath, String localPath)  
                throws IOException {  
            if (client == null)  
                return false;  
            boolean res = false;  
            FileOutputStream fileOutputStream = new FileOutputStream(localPath);  
            res = client.retrieveFile(remotePath, fileOutputStream);  
            fileOutputStream.flush();  
            fileOutputStream.close();  
            return res;  
      
        }  
      
        /** 
         * 删除文件 
         *  
         * @param remotePath ftp端路径 
         * @return 
         * @throws IOException 
         */  
        public boolean delete(String remotePath) throws IOException {  
            if (client == null)  
                return false;  
      
            return client.deleteFile(remotePath) || deleteDirectory(remotePath);  
        }  
      
        /** 
         * 创建目录 
         *  
         * @param remotePath 
         * @throws IOException 
         */  
        public boolean makeDirectory(String remotePath) throws IOException {  
            if (client == null)  
                return false;  
      
            String[] item = remotePath.split("/");  
            String currentPath = "";  
            for (int i = 0; i < item.length - 1; i++) {  
                currentPath = currentPath + "/" + item[i];  
                client.makeDirectory(currentPath);  
            }  
      
            return client.makeDirectory(remotePath);  
        }  
      
      
        /** 
         * 删除文件 
         *  
         * @param remotePath ftp端路径 
         * @return 
         * @throws IOException 
         */  
        private boolean deleteDirectory(String remotePath) throws IOException {  
            FTPFile[] files = listFiles(remotePath);  
            for (int i = 0; i < files.length; i++) {  
                if (files[i].isDirectory()) {  
                    deleteDirectory(remotePath + "/" + files[i].getName());  
                } else {  
                    client.deleteFile(remotePath + "/" + files[i].getName());  
                }  
            }  
            return client.removeDirectory(remotePath);  
        }  
      
        /** 
         * 重命名 
         *  
         * @param remoteOldPath  
         * @param remoteNewPath 
         * @return 
         * @throws IOException 
         */  
        public boolean rename(String remoteOldPath, String remoteNewPath)  
                throws IOException {  
            if (client == null)  
                return false;  
            return client.rename(remoteOldPath, remoteNewPath);  
        }  
      
        /** 
         * 退出登录 
         *  
         * @throws IOException 
         */  
        public void close() throws IOException {  
            if (client != null)  
                client.logout();  
        }  
    }