梦舞星殇 2016-08-12 06:30 采纳率: 0%
浏览 1941

java关于从linux服务器里通过FTPClienet下载文件及文件夹的方法

新人菜鸟一枚,不会下载文件夹以及文件夹里的内容,求指导!现在自己只做到了文件的下载,但是文件夹不会,配置文件里写的是访问ftp服务器的ip,端口,用户名密码以及服务器的路径和下载后存放的位置路径。
import java.io.IOException;
import java.net.SocketException;

import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;
import org.apache.log4j.Logger;

public class FTPUtil {
private static Logger logger = Logger.getLogger(FTPUtil.class);

/**
 * 获取FTPClient对象
 * 
 * @param ftpHost
 *            FTP主机服务器
 * @param ftpPassword
 *            FTP 登录密码
 * @param ftpUserName
 *            FTP登录用户名
 * @param ftpPort
 *            FTP端口 默认为21
 * @return
 */
public static FTPClient getFTPClient(String ftpHost, String ftpPassword,
        String ftpUserName, int ftpPort) {
    FTPClient ftpClient = null;
    try {
        ftpClient = new FTPClient();
        ftpClient.connect(ftpHost,ftpPort);// 连接FTP服务器
        ftpClient.login(ftpUserName, ftpPassword);// 登陆FTP服务器
        if (!FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) { // ftpClient.getReplyCode()返回的内容是答复的客户端代码
            //logger.info("未连接到FTP,用户名或密码错误。");
            System.out.println("未连接到FTP,用户名或密码错误。");
            ftpClient.disconnect();
        } else {
            System.out.println("FTP连接成功。");
        }
    } catch (SocketException e) {
        e.printStackTrace();
        System.out.println("FTP的IP地址可能错误,请正确配置。");
    } catch (IOException e) {
        e.printStackTrace();
        System.out.println("FTP的端口错误,请正确配置。");
    }
    return ftpClient;
}
}
----------------------------------------------------------------
import java.io.File;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.SocketException;
import java.util.Properties;

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

public class DownloadFileFromRmote {
private static boolean downloadFileFromRmote(String ftpHost,
Integer ftpPort, String ftpUserName, String ftpPassword,
String ftpPath, String fileName, String writeTempFielPath) {
boolean flag = false;
FTPClient ftpClient = new FTPClient();
FileOutputStream fos = null;
try {
ftpClient.connect(ftpHost, ftpPort);
ftpClient.login(ftpUserName, ftpPassword);
int reply;
reply = ftpClient.getReplyCode(); // 230
if (!FTPReply.isPositiveCompletion(reply)) {
ftpClient.disconnect();
return flag;
}
File localFile = new File(writeTempFielPath + File.separator
+ fileName);// G:\测试路径\1.png
if (!localFile.exists()) {
localFile.createNewFile();
}
ftpClient.setBufferSize(1024);
ftpClient.setControlEncoding("UTF-8");
// 设置文件类型(二进制)
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
fos = new FileOutputStream(localFile);
System.out.println(fos);
ftpClient.retrieveFile(fileName, fos);
flag = true;
} catch (SocketException e) {
System.out.println("连接失败!");
e.printStackTrace();
} catch (IOException e) {
System.out.println("下载失败!");
e.printStackTrace();
} finally {
try {
if (fos != null) {
fos.close();
}
if (ftpClient.isConnected()) {
ftpClient.disconnect();
}
} catch (IOException e) {
System.out.println("下载失败!");
e.printStackTrace();
}
}
return flag;
}

public static void main(String[] args) {
    int ftpPort = 0;
    String ftpHost = "";
    String ftpUserName = "";
    String ftpPassword = "";
    String ftpPath = "";// FTP路径
    String fileName = "";
    String writeTempFielPath = "";
    try {
        InputStream in = FTPUtil.class.getClassLoader()
                .getResourceAsStream("env.properties");
        if (in == null) {
            System.out.println("配置文件env.properties读取失败");
        } else {
            Properties properties = new Properties();
            properties.load(in);
            ftpUserName = properties.getProperty("ftpUserName"); // 从属性文件里获取用户密码
            ftpPassword = properties.getProperty("ftpPassword");
            ftpHost = properties.getProperty("ftpHost");
            ftpPort = Integer.valueOf(properties.getProperty("ftpPort"))
                    .intValue(); // 端口
            ftpPath = properties.getProperty("ftpPath");
            fileName = properties.getProperty("fileName");
            writeTempFielPath = properties.getProperty("writeTempFielPath");
            System.out.println(ftpUserName + "" + ftpPassword + ""
                    + ftpHost + "" + ftpPort + "" + ftpPort + "" + ftpPath);

            downloadFileFromRmote(ftpHost, ftpPort, ftpUserName,
                    ftpPassword, ftpPath, fileName, writeTempFielPath);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

}

  • 写回答

1条回答 默认 最新

  • 关注
    评论

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题