Java连接FTP上传和下载文件工具类代码如下:
package com.uxun.uxunplat.util;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.commons.net.ftp.FTPClient;
public class FTP {
/**
* 上传文件到FTP
* @param ip FTP的IP地址
* @param userName ftp用户名
* @param password ftp密码
* @param localPath 本地文件路径
* @param remotePath 上传到ftp站点的路径
* @param fileName 要上传的文件名
*/
public static final void fileUpload(String ip, String userName, String password, String localPath, String remotePath, String fileName) {
FTPClient ftpClient = new FTPClient();
FileInputStream fis = null;
try {
ftpClient.connect(ip);
ftpClient.login(userName, password);
File srcFile = new File(localPath+fileName);
fis = new FileInputStream(srcFile);
ftpClient.changeWorkingDirectory(remotePath);
ftpClient.setBufferSize(1024);
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
ftpClient.storeFile(fileName, fis);
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException("ftp上传错误", e);
} finally {
try {
fis.close();
ftpClient.disconnect();
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException("ftp上传错误", e);
}
}
}
/**
* 从ftp上下载文件
* @param fileName ftp上的文件名
* @param newFileName 本地生成的新文件名
* @param localPath 本地存放文件地址
* @param ip
* @param username
* @param password
* @param remotePath Ftp上文件地址
* @return
*/
public static boolean downFile(String fileName,String newFileName,String localPath,String ip,String username,String password,String remotePath) {
int point = 21;
boolean success = false;
FTPClient ftp = new FTPClient();
try {
int reply=0;
ftp.connect(ip, point);
//如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器
ftp.login(username , password);//登录
reply = ftp.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
ftp.disconnect();
return success;
}
ftp.changeWorkingDirectory(remotePath);//转移到FTP服务器目录
FTPFile[] fs = ftp.listFiles();
ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
for(FTPFile ff:fs){
String f= new String(ff.getName().getBytes("iso-8859-1"), "utf-8");
if(f.equals(fileName)){
File localFile = new File(localPath+"/"+newFileName);
OutputStream is = new FileOutputStream(localFile);
ftp.retrieveFile(ff.getName(), is);
is.close();
}
}
ftp.logout();
success = true;
} catch (IOException e) {
e.printStackTrace();
} finally {
if (ftp.isConnected()) {
try {
ftp.disconnect();
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
}
return success;
}
}