添加maven依赖:
<dependency>
<groupId>commons-net</groupId>
<artifactId>commons-net</artifactId>
<version>3.6</version>
</dependency>
Demo:
/**
* 2019年12月3日下午3:27:29
*/
package testFtp;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPConnectionClosedException;
import org.apache.commons.net.ftp.FTPReply;
/**
* @author XWF
*
*/
public class TestFtp {
public static void main(String[] args) {
String host = "192.168.1.141";
int port = 21;
String username = "ftpuser";
String password = "654321";
String savePath = "test";//保存到ftp根目录下的test目录
String localFileName = "abc.jpg";//待上传文件
String uploadFileName = "abcUpload.jpg";//上传重新命名
String downloadFileName = "abcDowunload.jpg";//下载到本地文件名
FTPClient ftp = new FTPClient();
try {
InputStream input = new FileInputStream(localFileName);
// ftp.setBufferSize(1024 * 1024 * 1);
// ftp.setControlEncoding("UTF-8");
ftp.connect(host, port);// 连接FTP服务器
ftp.enterLocalPassiveMode();//被动模式
//登录ftp
ftp.login(username, password);
int reply = ftp.getReplyCode();
System.out.println("reply code = " + reply);
if (!FTPReply.isPositiveCompletion(reply)) {
ftp.disconnect();
input.close();
System.out.println("not reply.");
return ;
}
//设置类型
ftp.setFileType(FTP.BINARY_FILE_TYPE);
ftp.setFileTransferMode(FTP.BINARY_FILE_TYPE);
//在ftp根目录下新建文件夹
System.out.println("ftp创建文件夹结果:" + ftp.makeDirectory(savePath));
//改变工作目录
ftp.changeWorkingDirectory(savePath);
//上传文件
boolean uploadResult = ftp.storeFile(uploadFileName, input);
System.out.println("上传文件是否成功:" + uploadResult);
input.close();
File downloadFile = new File(downloadFileName);
OutputStream local = new FileOutputStream(downloadFile);
//下载需要文件名设置编码
boolean downloadResult = ftp.retrieveFile(new String(uploadFileName.getBytes("GB2312"),"ISO-8859-1"), local);
System.out.println("下载文件是否成功:" + downloadResult);
local.close();
//登出ftp
ftp.logout();
System.out.println("结束");
} catch (FTPConnectionClosedException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (ftp.isConnected()) {
try {
ftp.disconnect();
} catch (IOException ioe) {
}
}
}
}
}
注:下载文件时要设置文件名的编码格式,否则可能下载的文件大小为0无法打开;
结果: