java 如何实现从ftp服务器上获取全部文件
时间: 2024-03-15 19:46:20 浏览: 71
在 Java 中,我们可以通过使用 FTP 客户端库来连接到 FTP 服务器并获取全部文件。下面是一个简单的代码示例,演示了如何使用 Apache Commons Net 库来连接到 FTP 服务器并获取所有文件:
```java
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class FTPDemo {
public static void main(String[] args) {
String server = "ftp.example.com";
int port = 21;
String user = "username";
String pass = "password";
FTPClient ftpClient = new FTPClient();
try {
// 连接到FTP服务器
ftpClient.connect(server, port);
ftpClient.login(user, pass);
ftpClient.enterLocalPassiveMode();
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
// 获取服务器上的所有文件
FTPFile[] files = ftpClient.listFiles();
// 下载所有文件
for (FTPFile file : files) {
String remoteFilePath = file.getName();
String localFilePath = "C:/downloads/" + remoteFilePath;
OutputStream outputStream = new FileOutputStream(localFilePath);
InputStream inputStream = ftpClient.retrieveFileStream(remoteFilePath);
byte[] bytesArray = new byte[4096];
int bytesRead = -1;
while ((bytesRead = inputStream.read(bytesArray)) != -1) {
outputStream.write(bytesArray, 0, bytesRead);
}
boolean success = ftpClient.completePendingCommand();
if (success) {
System.out.println("文件 " + remoteFilePath + " 下载成功。");
}
inputStream.close();
outputStream.close();
}
} catch (IOException ex) {
System.out.println("连接到FTP服务器失败: " + ex.getMessage());
ex.printStackTrace();
} finally {
try {
if (ftpClient.isConnected()) {
ftpClient.logout();
ftpClient.disconnect();
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
}
```
在上面的代码中,我们首先使用 `FTPClient` 对象连接到 FTP 服务器,然后使用 `listFiles()` 方法获取服务器上的所有文件。接着,我们使用 `retrieveFileStream()` 方法下载每个文件,并将其保存到本地文件系统中。最后,我们使用 `completePendingCommand()` 方法来通知服务器我们已经完成了文件下载。
阅读全文