我正在尝试将 FTP 路径中的所有文件下载到我的本地系统。但下载的文件为 0 KB。会有什么问题。请帮助我找到错误。(文件类型为 *.zip、*.pdf、*.xml)
提前致谢。
package ConnectFTP;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Calendar;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
public class FTPDownloader {
FTPClient ftp = null;
public FTPDownloader(String host, String user, String pwd) throws Exception {
ftp = new FTPClient();
int reply;
ftp.connect(host);
reply = ftp.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
ftp.disconnect();
throw new Exception("Exception in connecting to FTP Server");
}
ftp.login(user, pwd);
ftp.setFileType(FTP.BINARY_FILE_TYPE);
ftp.enterLocalPassiveMode();
}
public void downloadFile(String remoteFilePath, String localFilePath) {
try (FileOutputStream fos = new FileOutputStream(localFilePath)) {
this.ftp.retrieveFile(remoteFilePath, fos);
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
public void disconnect() {
if (this.ftp.isConnected()) {
try {
this.ftp.logout();
this.ftp.disconnect();
} catch (IOException ioe) {
}
}
}
public static void main(String[] args) {
try {
FTPDownloader ftpDownloader =
new FTPDownloader("192.168.3.1", "Adminuser", "password");
ftpDownloader.listFolders();
System.out.println("File downloaded successfully");
ftpDownloader.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
}
public void listFolders() {
try {
String ftpBasePath = "dev";
FTPFile[] fileList = ftp.listDirectories("/" + ftpBasePath);
for (FTPFile file : fileList) {
listFiles(file.getName());
}
} catch (IOException ex) {
Logger.getLogger(FTPDownloader.class.getName()).log(Level.SEVERE, null, ex);
}
}
public void listFiles(String path) {
try {
FTPFile[] fileList = ftp.listFiles(path);
for (FTPFile file : fileList) {
String currentFileName = file.getName();
String localPath = "E:\\FTPFiles\\"+currentFileName;
try (FileOutputStream fos = new FileOutputStream(localPath)) {
this.ftp.retrieveFile(currentFileName, fos);
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
} catch (IOException ioe) {
Logger.getLogger(FTPDownloader.class.getName()).log(Level.SEVERE, null, ioe);
}
}
}