在开发中有可能会遇到通过ftp协议来上传和下载文件,网上也有很多的帖子,但大部分都没什么用,通过参考其他和自己思考写了两个经测试可用的方法,这两个方法需要一个commons-net-3.x的jar包,具体可以去这里下载,里面是我放的一些常用的jar包,会持续更新。下面具体看一下实现的方法。
1.上传文件
/**
* ftp上传
* @param url ftp地址
* @param port ftp连接端口号
* @param username 登录用户名
* @param password 登录密码
* @param fileNamePath 本地文件保存路径
* @param fileName 本地文件名
* @return
*/
public static String ftpUpload(String url, String port, String username,String password, String fileNamePath,String fileName){
FTPClient ftpClient = new FTPClient();
FileInputStream fis = null;
String returnMessage = "0";
try {
ftpClient.connect(url, Integer.parseInt(port));
boolean loginResult = ftpClient.login(username, password);
int returnCode = ftpClient.getReplyCode();
if (loginResult && FTPReply.isPositiveCompletion(returnCode)) {// 如果登录成功
ftpClient.setBufferSize(1024);
ftpClient.setControlEncoding("UTF-8");
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
ftpClient.enterLocalPassiveMode();
fis = new FileInputStream(fileNamePath + fileName);
ftpClient.storeFile(fileName, fis);
returnMessage = "1"; //上传成功
} else {// 如果登录失败
returnMessage = "0";
}
} catch (IOException e) {
e.printStackTrace();
// throw new RuntimeException("FTP客户端出错!", e);
returnMessage = "-1";
} finally {
//IOUtils.closeQuietly(fis);
try {
ftpClient.disconnect();
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException("关闭FTP连接发生异常!", e);
}
}
return returnMessage;
}
2.下载文件
/**
* ftp下载
* @param url
* @param port
* @param username
* @param password
* @param filePath 存放文件的路径
* @param FTP_file 要下载的文件名
* @param SD_file 本地文件名
*/
public static String ftpDown(String url, int port, String username,String password, String filePath,String FTP_file,String SD_file){
BufferedOutputStream buffOut = null;
FTPClient ftpClient = new FTPClient();
String returnMessage = "0";
try {
ftpClient.connect(url, port);
boolean loginResult = ftpClient.login(username, password);
int returnCode = ftpClient.getReplyCode();
if (loginResult && FTPReply.isPositiveCompletion(returnCode)) {// 如果登录成功
ftpClient.setBufferSize(1024);
ftpClient.setControlEncoding("UTF-8");
ftpClient.enterLocalPassiveMode();
buffOut = new BufferedOutputStream(new FileOutputStream(filePath+SD_file),8*1024);
ftpClient.retrieveFile(FTP_file, buffOut);
buffOut.flush();
buffOut.close();
ftpClient.logout();
ftpClient.disconnect();
returnMessage = "1"; //上传成功
} else {// 如果登录失败
returnMessage = "0";
}
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException("FTP客户端出错!", e);
} finally {
//IOUtils.closeQuietly(fis);
try {
ftpClient.disconnect();
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException("关闭FTP连接发生异常!", e);
}
}
return returnMessage;
}