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();  
                                }  
                            }  
                        }  
                    } 
                    
                    
                    
                    /*
                     * 删除目录
                     * client:FTP客户端对象
                     * 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 {  
                        String path = url.getPath();  
                        client.changeDirectory(path);  
                        // 在本地创建当前下载的文件夹  
                        File folder = new File(localDir + "/" + new File(path).getName());  
                        if (!folder.exists()) {  
                            folder.mkdirs();  
                        }  
                        localDir = folder.getAbsolutePath();  
                        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) { // 递归下载子目录  
                                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);  
                        }  
                    }  
                    
                    /**
                     * 上传文件或目录 
                     * @param dir目标文件
                     * @param files文件或目录对象数组
                     * @throws Exception
                     */
                    public void upload(String dir, File... files) throws Exception {  
                        upload(dir, false, files);  
                    } 
                    
                    
                    
                    /**
                     * 删除文件或目录
                     * @param dirs
                     * @throws Exception
                     */
                    public void delete(String... dirs) throws Exception {  
                        if (StringUtils.isEmpty(dirs)) {  
                            return;  
                        }  
                        FTPClient client = null;  
                        try {  
                            client = getClient();  
                            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));  
                                }  
                            }  
                        } finally {  
                            logout(client);  
                        }  
                    }  
                    
                    
                    
                    
                    
                     /** 
                     * 下载文件或目录 
                     *  
                     * @param localDir 
                     *            本地存储目录 
                     * @param dirs 
                     *            文件或者目录 
                     * @throws Exception 
                     */  
                    public void download(String localDir, String... dirs) throws Exception {  
                        if (StringUtils.isEmpty(dirs)) {  
                            return;  
                        }  
                        FTPClient client = null;  
                        try {  
                            client = getClient();  
                            File folder = new File(localDir);  
                            if (!folder.exists()) { // 如果本地文件夹不存在,则创建  
                                folder.mkdirs();  
                            }  
                            int type = -1;  
                            String localPath = null;  
                            for (String dir : dirs) {  
                                client.changeDirectory("/"); // 切换至根目录  
                                type = getFileType(client, dir); // 获取当前类型  
                                if (type == 0) { // 文件  
                                    localPath = localDir + "/" + new File(dir).getName();  
                                    client.download(dir, new File(localPath));  
                                } else if (type == 1) { // 目录  
                                    downloadFolder(client, getURL(dir), localDir);  
                                }  
                            }  
                        } finally {  
                            logout(client);  
                        }  
                    } 
                     本文转自  素颜猪  51CTO博客,原文链接:http://blog.51cto.com/suyanzhu/1566323
                    
                   
相关文章
|
编解码 数据安全/隐私保护 Python
Python操作FTP服务器实现文件和文件夹的上传与下载,python清理ftp目录下的所有文件和非空文件夹
Python操作FTP服务器实现文件和文件夹的上传与下载,python清理ftp目录下的所有文件和非空文件夹
251 0
|
Ubuntu 数据安全/隐私保护
ftp文件上传下载等系列操作
ftp文件上传下载等系列操作
114 0
ftp文件上传下载等系列操作
|
网络协议 C# 文件存储
【愚公系列】2022年03月 C#帮助类-FTP的花样操作
【愚公系列】2022年03月 C#帮助类-FTP的花样操作
132 0
|
安全 Linux 网络安全
为什么不建议在云主机上使用ftp的2个原因
ftp文件传输服务历史源远流长,第一版FTP RFC协议制定于1971年,经过多年的完善、修补,很多80年代出生的IT人的第一次文件传输经历就是通过FTP完成的,笔者同样如此。记得当年2002年第一次使用IIS搭建FTP服务器,使用CuteFtp客户端访问下载教育网内的FTP视频资源.
4171 0
|
C# 数据安全/隐私保护
|
数据安全/隐私保护 网络安全 自然语言处理
|
Java 数据安全/隐私保护
如何在Webstorm/Phpstorm中设置连接FTP,并快速进行文件比较,上传下载,同步等操作
Phpstorm除了能直接打开localhost文件之外,还可以连接FTP,除了完成正常的数据传递任务之外,还可以进行本地文件与服务端文件的异同比较,同一文件自动匹配目录上传,下载,这些功能是平常IDE,FTP软件中少见的,而且是很耗工作时间的一个操作。
2162 0