Java的FTPClient连接池解决方案

2018-09-29· 1474 次浏览
我们在项目中经常会涉及到ftp上传、下载,客户资料、附件、图片等文件。但是若每次上传或下载时都去创建一次ftp连接,每次都创建后再关闭,则太耗费连接资源,这时候可以考虑使用连接池,就如同我们需要jdbc数据库连接池的道理一样。这里给大家介绍的是一个FTPClient连接池解决方案。此FTPClient连接池底层依赖apache的commons-net和commons-pool2 组件。Github项目地址:[https://github.com/XiaZengming/FtpClientPool](https://github.com/XiaZengming/FtpClientPool)Maven依赖: ```html <dependency> <groupId>com.itshidu.commons</groupId> <artifactId>ftp-client-pool</artifactId> <version>1.0.6</version> </dependency> ``` 代码演示: ```java //配置信息 FtpPoolConfig cfg = new FtpPoolConfig(); cfg.setHost("192.168.61.110"); cfg.setPort(21); cfg.setUsername("ftpuser"); cfg.setPassword("123456"); FTPClientFactory factory = new FTPClientFactory(cfg);//对象工厂FTPClientPool pool = new FTPClientPool(factory);//连接池对象FtpClientUtils util = new FtpClientUtils(pool); //工具对象FTPClient c = pool.borrowObject();//从池子中借一个FTPClient对象util.mkdirs("/xiu/daima/"); //在FTP的工作目录下创建多层目录InputStream in = new FileInputStream("D:/001.jpg"); //读取一个本地文件util.store(in, "/xiu/", "main.jpg");//上传到FTP服务器util.retrieve("/xiu/main.jpg", new FileOutputStream("D:/002.jpg"));//从FTP服务器取回文件//util.delete("/xiu/main.jpg"); //删除FTP服务器中的文件pool.returnObject(c);//把对象归还给池子 ``` 可以极大程度提高FTP响应速度。