Java ftp下载多个文件压缩
时间: 2023-11-09 16:08:45 浏览: 218
要下载多个文件并压缩它们,你可以使用Java的FTP客户端库,如Apache Commons Net。以下是一个简单的示例代码,可以将多个文件下载到本地,并将它们压缩成一个ZIP文件:
```java
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class FtpDownloadAndZip {
private static final String FTP_HOST = "ftp.example.com";
private static final int FTP_PORT = 21;
private static final String FTP_USERNAME = "username";
private static final String FTP_PASSWORD = "password";
private static final String LOCAL_DIR = "/path/to/local/dir/";
public static void main(String[] args) {
FTPClient ftpClient = new FTPClient();
try {
// 连接FTP服务器
ftpClient.connect(FTP_HOST, FTP_PORT);
ftpClient.login(FTP_USERNAME, FTP_PASSWORD);
// 切换工作目录到要下载的目录
ftpClient.changeWorkingDirectory("/path/on/ftp/server/");
// 获取要下载的文件列表
FTPFile[] files = ftpClient.listFiles();
if (files != null && files.length > 0) {
// 创建本地文件夹
File localDir = new File(LOCAL_DIR);
if (!localDir.exists()) {
localDir.mkdirs();
}
// 创建ZIP输出流
FileOutputStream fos = new FileOutputStream(LOCAL_DIR + "download.zip");
ZipOutputStream zos = new ZipOutputStream(fos);
// 下载每个文件并添加到ZIP输出流
for (FTPFile file : files) {
if (file.isFile()) {
String fileName = file.getName();
File localFile = new File(LOCAL_DIR + fileName);
OutputStream os = new BufferedOutputStream(new FileOutputStream(localFile));
ftpClient.retrieveFile(fileName, os);
os.close();
// 添加到ZIP输出流
ZipEntry entry = new ZipEntry(fileName);
zos.putNextEntry(entry);
FileInputStream fis = new FileInputStream(localFile);
byte[] buffer = new byte[1024];
int len;
while ((len = fis.read(buffer)) > 0) {
zos.write(buffer, 0, len);
}
zos.closeEntry();
fis.close();
// 删除本地文件
localFile.delete();
}
}
// 关闭ZIP输出流
zos.close();
fos.close();
}
// 断开连接
ftpClient.logout();
ftpClient.disconnect();
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
请注意,此代码仅提供基本示例,可能需要进行一些修改以适应您的特定情况。例如,您可能需要更改文件名或路径,或者添加错误处理和日志记录。
阅读全文