随笔-200  评论-148  文章-15  trackbacks-0
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

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

public class DownFTPFile {

private String hostname;
private String username;
private String password;
private String localBaseDir;
private String remoteBaseDir;


private static FTPClient ftpClient = new FTPClient();

public static void main(String[] args) {
String hostname = "172.18.72.66";
String username = "sfdc3";
String password = "sfdcadmin";
String localBaseDir = "c:/temp/";
String remoteBaseDir = "ptsinstall/v3.20.06";

DownFTPFile downFTPClient = new DownFTPFile();
downFTPClient.setHostname(hostname);
downFTPClient.setUsername(username);
downFTPClient.setPassword(password);
downFTPClient.setLocalBaseDir(localBaseDir);
downFTPClient.setRemoteBaseDir(remoteBaseDir);
downFTPClient.startDown();
}

private void startDown() {
try {
ftpClient.connect(hostname);
ftpClient.login(username, password);
FTPClientConfig conf = new FTPClientConfig( FTPClientConfig.SYST_UNIX);
ftpClient.configure(conf);
} catch (Exception e1) {
e1.printStackTrace();
}

try {
FTPFile[] files = null;
boolean changedir = ftpClient.changeWorkingDirectory(remoteBaseDir);
if ( changedir ){
files = ftpClient.listFiles();
for (int i = 0; i < files.length; i++) {
downloadFile(files[i], localBaseDir, remoteBaseDir);
}
}
} catch (Exception e) {
System.out.println(e);
}
}

private void downloadFile(FTPFile ftpFile, String relativeLocalPath,String relativeRemotePath) {
if (ftpFile.isFile()) {//down file
if (ftpFile.getName().indexOf("?") == -1) {
OutputStream outputStream = null;
try {
outputStream = new FileOutputStream(relativeLocalPath+ ftpFile.getName());
ftpClient.retrieveFile(ftpFile.getName(), outputStream);
outputStream.flush();
outputStream.close();
} catch (Exception e) {
System.err.println( e );
} finally {
try {
if (outputStream != null)
outputStream.close();
} catch (IOException e) {
System.out.println("ShowasaFile");
}
}
}
} else { //deal dirctory
String newlocalRelatePath = relativeLocalPath + ftpFile.getName();
String newRemote = new String(relativeRemotePath+ ftpFile.getName().toString());

File fl = new File(newlocalRelatePath);
if (!fl.exists()) {
fl.mkdirs();
}
try {
newlocalRelatePath = newlocalRelatePath + '/';
newRemote = newRemote + "/";
String currentWorkDir = ftpFile.getName().toString();
//enter relative workdirectory
boolean changedir = ftpClient.changeWorkingDirectory(currentWorkDir);
if (changedir) {
FTPFile[] files = null;
files = ftpClient.listFiles();
for (int i = 0; i < files.length; i++) {
downloadFile(files[i], newlocalRelatePath, newRemote);
}
}
//return parent directory
if (changedir)
ftpClient.changeToParentDirectory();
} catch (Exception e) {
System.out.println(e);
}
}
}


public String getHostname() {
return hostname;
}


public void setHostname(String hostname) {
this.hostname = hostname;
}


public String getPassword() {
return password;
}


public void setPassword(String password) {
this.password = password;
}


public String getUsername() {
return username;
}


public void setUsername(String username) {
this.username = username;
}


public String getLocalBaseDir() {
return localBaseDir;
}


public void setLocalBaseDir(String localBaseDir) {
this.localBaseDir = localBaseDir;
}


public String getRemoteBaseDir() {
return remoteBaseDir;
}


public void setRemoteBaseDir(String remoteBaseDir) {
this.remoteBaseDir = remoteBaseDir;
}
}
posted on 2008-05-16 13:22 无声 阅读(5315) 评论(2)  编辑  收藏 所属分类: 职场生活

评论:
# re: 一个java 下载FTP( Linux)服务器文件夹的例子 2011-08-21 15:23 | ww
非常感谢,代码很详尽哦  回复  更多评论
  
# re: 一个java 下载FTP( Linux)服务器文件夹的例子 2012-04-18 20:32 | pingdhm
感谢你  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: