作者:Ada乐悠悠 | 来源:互联网 | 2024-12-18 13:18
在Java应用程序开发过程中,FTP协议被广泛用于文件的上传和下载操作。本文通过JakartaCommonsNet库中的FTPClient类,详细介绍如何实现文件的上传和下载功能。
在Java应用开发中,FTP(文件传输协议)是常用的技术之一,主要用于文件的上传和下载。本文将介绍如何使用Jakarta Commons Net库中的FTPClient类来实现这些功能。
### 1. 文件上传
下面是一个使用FTPClient类上传文件的示例代码:
/**
* Description: 向FTP服务器上传文件
* @Version 1.0 Jul 27, 2008 4:31:09 PM by 崔红保(cuihongbao@d-heaven.com)
* @param host FTP服务器地址
* @param port FTP服务器端口
* @param username FTP登录用户名
* @param password FTP登录密码
* @param remoteDir FTP服务器上的目标目录
* @param fileName 上传的文件名
* @param inputStream 文件输入流
* @return 上传成功返回true,失败返回false
*/
public static boolean uploadFile(String host, int port, String username, String password, String remoteDir, String fileName, InputStream inputStream) {
boolean success = false;
FTPClient ftpClient = new FTPClient();
try {
ftpClient.connect(host, port);
ftpClient.login(username, password);
int replyCode = ftpClient.getReplyCode();
if (!FTPReply.isPositiveCompletion(replyCode)) {
ftpClient.disconnect();
return success;
}
ftpClient.changeWorkingDirectory(remoteDir);
ftpClient.storeFile(fileName, inputStream);
inputStream.close();
ftpClient.logout();
success = true;
} catch (IOException e) {
e.printStackTrace();
} finally {
if (ftpClient.isConnected()) {
try {
ftpClient.disconnect();
} catch (IOException ioe) {}
}
}
return success;
}
### 2. 文件下载
从FTP服务器下载文件的代码同样简单,示例如下:
/**
* Description: 从FTP服务器下载文件
* @Version 1.0 Jul 27, 2008 4:31:09 PM by 崔红保(cuihongbao@d-heaven.com)
* @param host FTP服务器地址
* @param port FTP服务器端口
* @param username FTP登录用户名
* @param password FTP登录密码
* @param remoteDir FTP服务器上的源目录
* @param fileName 要下载的文件名
* @param localDir 本地保存路径
* @return 下载成功返回true,失败返回false
*/
public static boolean downloadFile(String host, int port, String username, String password, String remoteDir, String fileName, String localDir) {
boolean success = false;
FTPClient ftpClient = new FTPClient();
try {
ftpClient.connect(host, port);
ftpClient.login(username, password);
int replyCode = ftpClient.getReplyCode();
if (!FTPReply.isPositiveCompletion(replyCode)) {
ftpClient.disconnect();
return success;
}
ftpClient.changeWorkingDirectory(remoteDir);
FTPFile[] files = ftpClient.listFiles();
for (FTPFile file : files) {
if (file.getName().equals(fileName)) {
File localFile = new File(localDir + "/" + file.getName());
OutputStream outputStream = new FileOutputStream(localFile);
ftpClient.retrieveFile(file.getName(), outputStream);
outputStream.close();
}
}
ftpClient.logout();
success = true;
} catch (IOException e) {
e.printStackTrace();
} finally {
if (ftpClient.isConnected()) {
try {
ftpClient.disconnect();
} catch (IOException ioe) {}
}
}
return success;
}
### 示例测试代码
#### 1. 上传本地文件到FTP服务器
@Test
public void testUploadFromFile() {
try {
FileInputStream inputStream = new FileInputStream(new File("D:/test.txt"));
boolean result = uploadFile("127.0.0.1", 21, "test", "test", "D:/ftp", "test.txt", inputStream);
System.out.println(result);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
#### 2. 从字符串生成文件并上传到FTP服务器
@Test
public void testUploadFromString() {
try {
InputStream inputStream = new ByteArrayInputStream("test ftp".getBytes("utf-8"));
boolean result = uploadFile("127.0.0.1", 21, "test", "test", "D:/ftp", "test.txt", inputStream);
System.out.println(result);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}