`
weasel100
  • 浏览: 3088 次
  • 性别: Icon_minigender_1
  • 来自: 西安
最近访客 更多访客>>
社区版块
存档分类
最新评论

使用FTPClient上传下载文件夹

阅读更多

程序自动递归下载指定目录下的所有文件及子文件夹,上传时,自动递归创建服务器目录

/**

 * @author: bruce.huang

 * @createTime:2014年8月4日

 */

package com.framework.ftp;

 

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.OutputStream;

import java.util.HashMap;

 

import org.apache.commons.net.ftp.FTPClient;

import org.apache.commons.net.ftp.FTPFile;

import org.apache.commons.net.ftp.FTPReply;

import org.apache.log4j.Logger;

 

import com.framework.xml.ServersFileReader;

import com.framework.xml.xmlbean.ServersBean;

 

/**

 * @author black

 * 

 */

public class FtpClient {

HashMap<String, String> map = null;

private static final Logger log = Logger.getLogger(FtpClient.class);

 

public HashMap<String, String> downLoad(String serverName) {

// "ftpServer"

map = new HashMap<String, String>();

ServersBean cfb = ServersFileReader.readServerProperty().get(serverName);

FTPClient ftp = new FTPClient();

FileOutputStream fos = null;

try {

ftp.connect(cfb.getServerIP());

ftp.login(cfb.getServerUser(), cfb.getServerPassword());

 

String remoteFileName = cfb.getServerHomeDir();

fos = new FileOutputStream(remoteFileName);

 

ftp.setBufferSize(1024);

// 设置文件类型(二进制)

ftp.setFileType(FTPClient.BINARY_FILE_TYPE);

ftp.retrieveFile(remoteFileName, fos);

 

this.downloadFiles(ftp, remoteFileName, cfb.getLocalHomeDir());

} catch (IOException e) {

e.printStackTrace();

throw new RuntimeException("FTP客户端出错!", e);

} finally {

try {

if (fos != null)

fos.close();

} catch (IOException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}

try {

ftp.disconnect();

} catch (IOException e) {

e.printStackTrace();

throw new RuntimeException("关闭FTP连接发生异常!", e);

}

}

return map;

}

 

/************************************

* 下载远程目录

* */

private void downloadFiles(FTPClient ftp, String remoteFileName, String localPath) throws IOException {

// 转移到FTP服务器目录

ftp.changeWorkingDirectory(remoteFileName);

FTPFile[] fs = ftp.listFiles();

for (FTPFile ff : fs) {

if (ff.isDirectory()) {

downloadFiles(ftp, remoteFileName + "/" + ff.getName(), localPath + "/" + ff.getName());

} else {

File localFile = new File(localPath + "/" + ff.getName());

if (!localFile.getParentFile().exists()) {

localFile.getParentFile().mkdirs();

}

OutputStream is = new FileOutputStream(localFile);

ftp.retrieveFile(ff.getName(), is);

map.put(ff.getName(), ff.getSize() + ""); // 放数据

log.info("ftp下载远程文件:" + remoteFileName + "/" + ff.getName() + "(字节数:" + ff.getSize() + ")" + "到" + localPath + "/" + ff.getName());

is.close();

}

}

 

}

 

public static boolean upload(String serverName) {

ServersBean serverBean = ServersFileReader.readServerProperty().get(serverName);

boolean success = false;

FTPClient ftp = new FTPClient();

try {

int reply;

ftp.connect(serverBean.getServerIP(), serverBean.getServerPort());// 连接FTP服务器

ftp.login(serverBean.getServerUser(), serverBean.getServerPassword());// 登录

ftp.setFileType(FTPClient.BINARY_FILE_TYPE);

reply = ftp.getReplyCode();

if (!FTPReply.isPositiveCompletion(reply)) {

ftp.disconnect();

return success;

}

ftp.changeWorkingDirectory(serverBean.getServerHomeDir());

uploadFiles(ftp, serverBean.getServerHomeDir(), new File(serverBean.getLocalHomeDir()));

ftp.logout();

success = true;

} catch (IOException e) {

e.printStackTrace();

} finally {

if (ftp.isConnected()) {

try {

ftp.disconnect();

} catch (IOException ioe) {

}

}

}

return success;

}

 

/*********************

* 上传文件或文件夹

* */

private static void uploadFiles(FTPClient ftp, String remotePath, File localFile) {

if (localFile.isDirectory()) {

for (File ff : localFile.listFiles()) {

if (ff.isDirectory()) {

try {

ftp.changeWorkingDirectory(remotePath);

if (!ftp.changeWorkingDirectory(remotePath + "/" + localFile.getName())) {

log.info("FTP到目录(" + remotePath + ")下创建文件夹:" + ff.getName());

ftp.makeDirectory(ff.getName());

}

uploadFiles(ftp, remotePath + "/" + ff.getName(), ff);// 递归调用,传文件夹

} catch (IOException e) {

log.error("FTP服务器创建远程目录(" + remotePath + "/" + ff.getName() + ")失败:" + e.getMessage());

}

} else {

uploadFile(ftp, remotePath, ff);

}

}

} else {

uploadFile(ftp, remotePath, localFile);

}

}

 

/*****************************************

* 上传单个文件

* */

private static void uploadFile(FTPClient ftp, String remotePath, File localFile) {

try {

log.info("开始上传文件到:" + remotePath + "/==" + localFile.getName());

ftp.changeWorkingDirectory(remotePath);

ftp.storeFile(localFile.getName(), new FileInputStream(localFile));

} catch (IOException e) {

log.error("FTP向服务器(" + ftp.getRemoteAddress().getHostAddress() + ")上传文件(" + localFile.getAbsolutePath() + ")失败:" + e.getMessage());

}

}

}

 

 

 

文件引用的服务对象

/**

 * @author: bruce.huang

 * @createTime:2014年7月27日

 */

package com.framework.xml.xmlbean;

 

/**

 * @author black

 * 

 */

public class ServersBean {

private String name;

private String description;

private String serverIP;

private int serverPort;

private String serverUser;

private String serverPassword;

private String serverHomeDir;

private String localHomeDir;

 

public String getLocalHomeDir() {

return localHomeDir;

}

public void setLocalHomeDir(String localHomeDir) {

this.localHomeDir = localHomeDir;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getDescription() {

return description;

}

public void setDescription(String description) {

this.description = description;

}

public String getServerIP() {

return serverIP;

}

public void setServerIP(String serverIP) {

this.serverIP = serverIP;

}

public int getServerPort() {

return serverPort;

}

public void setServerPort(int serverPort) {

this.serverPort = serverPort;

}

public String getServerUser() {

return serverUser;

}

public void setServerUser(String serverUser) {

this.serverUser = serverUser;

}

public String getServerPassword() {

return serverPassword;

}

public void setServerPassword(String serverPassword) {

this.serverPassword = serverPassword;

}

public String getServerHomeDir() {

return serverHomeDir;

}

public void setServerHomeDir(String serverHomeDir) {

this.serverHomeDir = serverHomeDir;

}

}

 

 

 

 

分享到:
评论

相关推荐

    调用FtpClient类上传文件(java)

    以下是一个简单的使用`FtpClient`上传文件的Java代码示例: ```java import org.apache.commons.net.ftp.FTP; import org.apache.commons.net.ftp.FTPClient; import java.io.FileInputStream; import java.io....

    java实现Ftp批量下载文件及解压

    这个库提供了丰富的FTP操作API,包括连接、登录、文件上传和下载等。 1. **导入Apache Commons Net库**: 在项目中添加Apache Commons Net依赖,如果使用Maven,可以在pom.xml文件中添加以下依赖: ```xml ...

    javaftp.rar_FTPClient java_ftpclient_javaftp client_swing上传下载_上传

    在“javaftp.rar”项目中,用户可能可以通过按钮选择本地文件或文件夹,然后使用FTPClient将它们上传到FTP服务器。同样,用户也可以下载服务器上的文件或文件夹,或者对已存在的文件进行重命名和删除操作。 ...

    java FTP服务器文件上传下载,创建多级文件夹.zip

    本教程将详细讲解如何使用Java实现FTP服务器的文件上传、下载以及创建多级文件夹的功能,并提供一个可以直接使用的demo。 首先,Java中的FTP操作通常依赖于`org.apache.commons.net.ftp`库,这个库提供了FTPClient...

    上传本地文件夹的文件到FTP服务器指定目录

    FTP(File Transfer Protocol)是一种标准网络协议,用于在客户端和服务器之间上传、下载文件。本项目聚焦于如何将本地文件夹中的文件上传到FTP服务器的特定目录,这在网站更新、数据迁移或备份场景中尤其有用。我们...

    java项目实现远程UbuntuFTP下载文件和文件夹

    总之,Java结合Apache Commons Net库可以轻松实现远程Ubuntu服务器的FTP文件和文件夹下载,以及下载文件的SHA256校验。通过理解和实践这些步骤,开发者可以构建自己的FTP客户端工具,满足各种远程数据交换的需求。

    android实现ftp上传、下载文件,支持文件夹哦

    本文将详细讲解如何在Android应用中实现FTP的文件上传和下载功能,同时支持对文件夹的操作。 首先,我们需要了解FTP的基本概念。FTP是一种基于TCP的应用层协议,用于在网络上进行文件的传输。它定义了两个主要的...

    java FTP 上传 下载 (中文 ) 文件

    在Java中,我们通常通过`FTPClient`来建立与FTP服务器的连接,设置用户凭据,然后进行文件的上传和下载。 以下是一个使用Apache Commons Net库进行FTP上传和下载的简单示例: 1. **FTP连接**: - 导入必要的库:`...

    android ftp 下载及上传文件,支持文件夹

    FTPClient类是实现FTP功能的核心,下面分别讲解下载和上传文件,以及处理文件夹的操作。 **1. 文件下载** 下载文件的基本流程包括连接服务器、登录、切换工作目录、获取文件信息,然后读取并保存文件到本地。以下...

    .net ftp上传文件文件夹

    本文将深入探讨如何使用.NET进行FTP文件和文件夹的上传操作。 首先,我们需要引入`System.Net.FtpClient`命名空间,它包含了处理FTP连接和文件操作的类。如果你使用的是.NET Framework,这个命名空间已经包含在内;...

    Java中FTPClient上传中文目录、中文文件名乱码问题解决方法

    在Java编程中,使用FTPClient进行文件传输时,可能会遇到一个常见的问题,即当尝试创建中文目录或上传具有中文名称的文件时,这些目录名和文件名会显示为乱码,通常表现为“??”这样的形式。这个问题主要是由于FTP...

    C#实现FTP操作和Zip压缩操作

    本地文件的压缩和解压缩,本地文件单个和批量上传到服务器,并且可以选择上传到FTP服务器的目的目录,FTP服务器文件分级浏览,ftp服务器上文件单个和批量下载到本地指定目录,FTP服务器上新建文件夹,文件重命名,...

    C#FTP操作:上传、下载、在服务器上创建文件夹、删除服务器上的文件

    本篇将详细介绍如何使用C#进行FTP操作,包括上传文件、下载文件、在服务器上创建文件夹以及删除服务器上的文件。 首先,进行FTP操作需要使用到System.Net命名空间中的FtpWebRequest和FtpWebResponse类。以下是一些...

    Android使用ftp方式实现文件上传和下载

    Android 使用 FTP 方式实现文件上传和下载 Android 使用 FTP 方式实现文件上传和下载是移动应用开发中的一项重要功能,特别是在 OTA 在线升级项目中,文件上传和下载是一个关键步骤。下面就 Android 使用 FTP 方式...

    FTPClient.listFiles()获取文件为空的问题.

    ftpClient.changeWorkingDirectory(path); ftpClient.enterLocalPassiveMode(); //由于apache不支持中文语言环境,通过定制类解析中文日期类型 ftpClient.configure(new FTPClientConfig(...

    ftp上传下载文件及文件夹

    以上就是使用Java进行FTP文件上传和下载的基本操作,对于文件夹的处理,通常需要递归地处理目录内的所有文件和子目录。在Apache Commons Net中,可以使用 `FTPClient` 的 `changeWorkingDirectory()` 和 `listNames...

    Ftp上传文件和文件夹

    总结来说,C#环境下FTP文件上传涉及的关键知识点有:FTP协议,System.Net.FtpWebRequest类的使用,网络凭据的设置,文件读取和流操作,以及可能的递归处理来上传文件夹。在实际项目中,根据需求选择合适的方法和库,...

    ftp上传文本、移动文件、删除文件

    * 如果不需要移动,只是需要文件重命名,可以使用ftp.rename(oleName,newName) * @param ftp * @param oldPath * @param newPath * @return */ public boolean moveFile&#40;FTPClient ftp,String oldPath,...

    FTPClient_src.zip_ FTPClient_src_FTPCLient_src

    FTP(File Transfer Protocol)是互联网上广泛使用的协议之一,用于在计算机之间进行文件的上传和下载。这个项目可能是为了帮助用户方便、高效地通过FTP服务器管理他们的文件。 FTPClient_src标签暗示了这个压缩包...

    FTP上传下载工具

    同样,文件和文件夹下载也是通过FTPClient实现。下载文件夹意味着下载整个目录结构,这可能涉及到创建本地文件系统的镜像。 4. **进度显示**: 工具中的“带进度”特性,意味着它实现了文件传输的进度反馈。这...

Global site tag (gtag.js) - Google Analytics