java ftp 下载zip文件下载_java 下载异地FTP中的zip文件

publicclassFtpClientUtil{FtpClientftpClient;privateStringserver;privateintport;privateStringuserName;privateStringuserPassword;publicFtpClientUtil(Stringserver,intport,St...

public class FtpClientUtil {

FtpClient ftpClient;

private String server;

private int port;

private String userName;

private String userPassword;

public FtpClientUtil(String server,int port,String userName,String userPassword)

{

this.server=Constants.FTP_IP;

this.port=Constants.FTP_PORT;

this.userName=Constants.USER_NAME;

this.userPassword=Constants.USER_PASSWORD;

}

/**

* 链接到服务器

* @return

*/

public boolean open()

{

if(ftpClient!=null&&ftpClient.serverIsOpen())

return true;

try

{

ftpClient= new FtpClient();

ftpClient.openServer(server,port);

ftpClient.login(userName, userPassword);

ftpClient.binary();

return true;

}

catch(Exception e)

{

e.printStackTrace();

ftpClient=null;

return false;

}

}

public boolean cd(String dir){

boolean f = false;

try {

ftpClient.cd(dir);

} catch (IOException e) {

e.printStackTrace();

return f;

}

return true;

}

/**

* 从FTP服务器上下载文件并返回下载文件长度

* @param ftpDirectoryAndFileName

* @param localDirectoryAndFileName

* @return

* @throws Exception

*/

public long download(String ftpDirectoryAndFileName,String localDirectoryAndFileName)throws Exception

{

long result = 0;

if(!open())

return result;

TelnetInputStream is = null;

FileOutputStream os = null;

try

{

is = ftpClient.get(ftpDirectoryAndFileName);

java.io.File outfile = new java.io.File(localDirectoryAndFileName);

os = new FileOutputStream(outfile);

byte[] bytes = new byte[1024];

int c;

while ((c = is.read(bytes)) != -1)

{

os.write(bytes, 0, c);

result = result + c;

}

}

catch (Exception e)

{

throw e;

}

finally

{

if (is != null)

is.close();

if (os != null)

os.close();

}

return result;

}

这里的 ftpDirectoryAndFileName和localDirectoryAndFileName按照字面意思第一个是ftp的目录地址,后面的是本地的目录地址。

但是ftpDirectoryAndFileName和localDirectoryAndFileName应该怎么写呢?

我ftpDirectoryAndFileName为:"",localDirectoryAndFileName为:"E:\\temp_workspace\\tmp\\"

提示sun.net.ftp.FtpProtocolException: 501 Syntax error: Invalid number of parameters.的错误。

我只要下载这部分的,代码测试好了的再贴,我会再加50分的

这部分已经搞定了,是少了一个获取FTP服务器上的数据命名规则,或者载入sun下的ftpClient的一个包就搞定了,谢谢你们,只能给一个人分,那就给第一个回答问题的人吧!:)

展开

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下载多个文件并压缩它们,你可以使用JavaFTP客户端库,如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(); } } } ``` 请注意,此代码仅提供基本示例,可能需要进行一些修改以适应您的特定情况。例如,您可能需要更改文件名或路径,或者添加错误处理和日志记录。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值