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

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条回答 默认 最新

  • 关注
    评论

报告相同问题?

悬赏问题

  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥15 绘制多分类任务的roc曲线时只画出了一类的roc,其它的auc显示为nan
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?