在 Java 中批量下载 FTP 服务器上的文件有多种方式,其中一些常见的方式包括使用 Apache Commons Net 库和使用 Java 的内置类库。下面我将介绍两种不同的方法,并提供相关的示例代码以及 Maven 和 Gradle 的依赖坐标。
Apache Commons Net 库是一个常用的 Java 库,用于处理网络协议,包括 FTP。以下是使用 Apache Commons Net 库来批量下载 FTP 文件的步骤:
添加 Apache Commons Net 库的依赖:
Maven 依赖坐标:
<dependency>
<groupId>commons-net</groupId>
<artifactId>commons-net</artifactId>
<version>3.8.0</version> <!-- 版本号可能会有更新 -->
</dependency>
Gradle 依赖坐标:
implementation group: 'commons-net', name: 'commons-net', version: '3.8.0'
创建 Java 代码来下载 FTP 文件:
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import java.io.FileOutputStream;
import java.io.IOException;
public class FTPBatchDownload {
public static void main(String[] args) {
String server = "ftp.example.com";
int port = 21;
String user = "username";
String pass = "password";
String remoteDir = "/path/to/remote/directory/";
String localDir = "/path/to/local/directory/";
try {
FTPClient ftpClient = new FTPClient();
ftpClient.connect(server, port);
ftpClient.login(user, pass);
ftpClient.enterLocalPassiveMode();
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
String[] fileNames = ftpClient.listNames(remoteDir);
if (fileNames != null) {
for (String fileName : fileNames) {
String remoteFilePath = remoteDir + fileName;
String localFilePath = localDir + fileName;
try (FileOutputStream fos = new FileOutputStream(localFilePath)) {
if (ftpClient.retrieveFile(remoteFilePath, fos)) {
System.out.println("Downloaded: " + fileName);
} else {
System.err.println("Failed to download: " + fileName);
}
}
}
}
ftpClient.logout();
ftpClient.disconnect();
} catch (IOException e) {
e.printStackTrace();
}
}
}
这个示例代码连接到 FTP 服务器,登录,列出远程目录中的文件,然后逐个下载它们到本地目录。
另一种方法是使用 Java 内置的 URLConnection
来下载 FTP 文件。这个方法不需要额外的依赖库,但相对来说更复杂一些。以下是步骤:
创建 Java 代码来下载 FTP 文件:
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
public class FTPBatchDownload {
public static void main(String[] args) {
String server = "ftp://username:password@ftp.example.com/path/to/remote/directory/";
String localDir = "/path/to/local/directory/";
try {
URL url = new URL(server);
URLConnection connection = url.openConnection();
InputStream inputStream = connection.getInputStream();
String[] parts = server.split("/");
String fileName = parts[parts.length - 1];
String localFilePath = localDir + fileName;
try (FileOutputStream fos = new FileOutputStream(localFilePath)) {
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = inputStream.read(buffer)) != -1) {
fos.write(buffer, 0, bytesRead);
}
System.out.println("Downloaded: " + fileName);
}
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
这个示例代码使用 URLConnection
连接到 FTP 服务器,并将文件下载到本地目录。需要注意的是,FTP 服务器的 URL 中包括用户名和密码。
使用哪种方法取决于您的需求和项目的依赖。如果您需要更多的 FTP 操作和更好的性能,Apache Commons Net 库可能是更好的选择。如果您想保持依赖较少,使用 Java 内置的 URLConnection
也是一个有效的选择。