新人菜鸟一枚,不会下载文件夹以及文件夹里的内容,求指导!现在自己只做到了文件的下载,但是文件夹不会,配置文件里写的是访问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();
}
}
}