java ftp 下载zip文件下载_java实现FTP下载文件

ftp上传下载文件,是遵照ftp协议上传下载文件的,本例仅以下载文件为例。

重要的方法解释:

1.FTP功能相关依赖路径:org.apache.commons.net.ftp.*;

2.ftp默认端口是21,如果非默认端口连接,需指定:ftp.connect(ftphostaddr, 22);//22为端口号

3.ftp.changeWorkingDirectory(ftppath) //实现切换目录

4.FTPFile[] fs = ftp.listFiles(); 获取指定目录下的文件列表

public class FtpTools {

private final static String ftphostaddr = "xxx";//服务器地址

private final static String ftppath = "xxx";//操作的服务器目录

private final static String ftpname = "xxx";//服务器登录名

private final static String ftppwd = "xxx";//登录密码

private final static String localpath = getCurentContentPath()+"uploadfiles";

private final static String fileSeparator = System.getProperty("file.separator");

private static final Logger LOGGER = Logger.getLogger(FtpTools.class);

public static void main(String[] args) {

FtpTools tools = new FtpTools();

tools.downFile("test.txt");

}

/**

* 从文件服务器上下载文件到本地

* @param filename

*/

public static void downFile(String filename) {

FTPClient ftp = initFtp();

try{

//4.指定要下载的目录

ftp.changeWorkingDirectory(ftppath);// 转移到FTP服务器目录

//5.遍历下载的目录

FTPFile[] fs = ftp.listFiles();

for (FTPFile ff : fs) {

//解决中文乱码问题,两次解码

byte[] bytes=ff.getName().getBytes("iso-8859-1");

String fn=new String(bytes,"utf8");

if (fn.equals(filename)) {

//6.写操作,将其写入到本地文件中

LOGGER.info("下载文件:"+filename+"开始:"+System.currentTimeMillis());

File localFile = new File(localpath +fileSeparator+ ff.getName());

OutputStream is = new FileOutputStream(localFile);

ftp.retrieveFile(ff.getName(), is);

//7.判断本地文件是否正确写入,如果正确写入,将文件服务器上的文件删除

if(localFile.exists()){

LOGGER.info("删除服务器上文件:"+filename);

ftp.deleteFile(ff.getName());

}

LOGGER.info("下载文件:"+filename+"结束:"+System.currentTimeMillis());

is.close();

}

}

ftp.logout();

}catch(Exception e){

e.printStackTrace();

new Exception("从服务器下载文件过程中发生错误");

}finally{

if (ftp.isConnected()) {

try {

ftp.disconnect();

} catch (IOException ioe) {

ioe.printStackTrace();

}

}

}

}

public static FTPClient initFtp() {

int reply;

FTPClient ftp = new FTPClient();

try {

// 1.连接服务器

//ftp.connect(ftphostaddr);

ftp.connect(ftphostaddr, 22);

// 2.登录服务器 如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器

ftp.login(ftpname, ftppwd);

// 3.判断登陆是否成功

reply = ftp.getReplyCode();

if (!FTPReply.isPositiveCompletion(reply)) {

ftp.disconnect();

}

} catch (Exception e) {

e.printStackTrace();

new Exception("服务器连接失败");

}

return ftp;

}

public static String getCurentContentPath(){

String path = "";

path = FtpTools.class.getClassLoader().getResource("").toString();

path = path.replace("file:", "").substring(0, path.indexOf("WEB-INF")).replace("WEB-IN", "").replace("WEB-I", "");

return path;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值