天天看點

FTP-使用ftp4j操作FTP_2

                    /*

                     * 上傳目錄 

                     * client:FTP用戶端對象

                     * parentUrl:父節點URL

                     * file:目錄

                     * del:

                     */

                    private void uploadFolder(FTPClient client, URL parentUrl, File file,  

                            boolean del) throws Exception {  

                        client.changeDirectory(parentUrl.getPath());  

                        String dir = file.getName(); // 目前目錄名稱  

                        URL url = getURL(parentUrl, dir);  

                        if (!exists(client, url.getPath())) { // 判斷目前目錄是否存在  

                            client.createDirectory(dir); // 建立目錄  

                        }  

                        client.changeDirectory(dir);  

                        File[] files = file.listFiles(); // 擷取目前檔案夾所有檔案及目錄  

                        for (int i = 0; i < files.length; i++) {  

                            file = files[i];  

                            if (file.isDirectory()) { // 如果是目錄,則遞歸上傳  

                                uploadFolder(client, url, file, del);  

                            } else { // 如果是檔案,直接上傳  

                                client.changeDirectory(url.getPath());  

                                client.upload(file);  

                                if (del) { // 删除源檔案  

                                    file.delete();  

                                }  

                            }  

                    } 

                    /*

                     * 删除目錄

                     * url:FTP URL

                    private void deleteFolder(FTPClient client, URL url) throws Exception {  

                        String path = url.getPath();  

                        client.changeDirectory(path);  

                        FTPFile[] files = client.list();  

                        String name = null;  

                        for (FTPFile file : files) {  

                            name = file.getName();  

                            // 排除隐藏目錄  

                            if (".".equals(name) || "..".equals(name)) {  

                                continue;  

                            if (file.getType() == FTPFile.TYPE_DIRECTORY) { // 遞歸删除子目錄  

                                deleteFolder(client, getURL(url, file.getName()));  

                            } else if (file.getType() == FTPFile.TYPE_FILE) { // 删除檔案  

                                client.deleteFile(file.getName());  

                        client.changeDirectoryUp();// 反回上一級目錄 

                        client.deleteDirectory(url.getPath()); // 删除目前目錄  

                    }  

                    /** 

                     * 下載下傳檔案夾 

                     *  

                     * @param client 

                     *            FTP用戶端對象 

                     * @param url 

                     *            FTP URL 

                     * @param localDir 

                     *            本地存儲目錄 

                     * @throws Exception 

                     */  

                    private void downloadFolder(FTPClient client, URL url, String localDir)  

                            throws Exception {  

                        // 在本地建立目前下載下傳的檔案夾  

                        File folder = new File(localDir + "/" + new File(path).getName());  

                        if (!folder.exists()) {  

                            folder.mkdirs();  

                        localDir = folder.getAbsolutePath();  

                            if (file.getType() == FTPFile.TYPE_DIRECTORY) { // 遞歸下載下傳子目錄  

                                downloadFolder(client, getURL(url, file.getName()), localDir);  

                            } else if (file.getType() == FTPFile.TYPE_FILE) { // 下載下傳檔案  

                                client.download(name, new File(localDir + "/" + name));  

                        client.changeDirectoryUp();  

                    /**

                     * 上傳檔案或目錄

                     * @param dir目标檔案

                     * @param del是否删除源檔案,預設為false

                     * @param files檔案或目錄對象數組

                     * @param del:是否删除源檔案,true删除,false不删除

                     * @throws Exception

                    public void upload(String dir, boolean del, File... files) throws Exception {  

                        if (StringUtils.isEmpty(dir) || StringUtils.isEmpty(files)) {  

                            return;  

                        FTPClient client = null;  

                        try {  

                            client = getClient();  

                            mkdirs(client, dir); // 建立檔案  

                            for (File file : files) {  

                                if (file.isDirectory()) { // 上傳目錄  

                                    uploadFolder(client, getURL(dir), file, del);  

                                } else {  

                                    client.upload(file); // 上傳檔案  

                                    if (del) { // 為true删除源檔案  

                                        file.delete();  

                                    }  

                        } finally {  

                            logout(client);  

                     * 上傳檔案或目錄 

                    public void upload(String dir, File... files) throws Exception {  

                        upload(dir, false, files);  

                     * 删除檔案或目錄

                     * @param dirs

                    public void delete(String... dirs) throws Exception {  

                        if (StringUtils.isEmpty(dirs)) {  

                            int type = -1;  

                            for (String dir : dirs) {  

                                client.changeDirectory("/"); // 切換至根目錄  

                                type = getFileType(client, dir); // 擷取目前類型  

                                if (type == 0) { // 删除檔案  

                                    client.deleteFile(dir);  

                                } else if (type == 1) { // 删除目錄  

                                    deleteFolder(client, getURL(dir));  

                     /** 

                     * 下載下傳檔案或目錄 

                     * @param dirs 

                     *            檔案或者目錄 

                    public void download(String localDir, String... dirs) throws Exception {  

                            File folder = new File(localDir);  

                            if (!folder.exists()) { // 如果本地檔案夾不存在,則建立  

                                folder.mkdirs();  

                            String localPath = null;  

                                if (type == 0) { // 檔案  

                                    localPath = localDir + "/" + new File(dir).getName();  

                                    client.download(dir, new File(localPath));  

                                } else if (type == 1) { // 目錄  

                                    downloadFolder(client, getURL(dir), localDir);  

                    本文轉自  素顔豬  51CTO部落格,原文連結:http://blog.51cto.com/suyanzhu/1566323