Java的FTPClient连接池解决方案

2018-09-29· 196 次浏览
我们在项目中经常会涉及到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>FtpClientPool</artifactId> <version>1.0</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(); //工具对象 FTPClient c = pool.borrowObject();//从池子中借一个FTPClient对象 util.mkdirs(c, "/data/test"); //在FTP的工作目录下创建多层目录 InputStream in = new FileInputStream("D:/001.jpg"); //读取一个本地文件 util.store(c, in, "/data/imgs/2018/09/29", "main.jpg");//上传到FTP服务器 util.retrieve(c, "/data/imgs/2018/09/29/main.jpg", new FileOutputStream("F:/002.jpg"));//从FTP服务器取回文件 util.delete(c, "/data/imgs/2018/09/29/main.jpg"); //删除FTP服务器中的文件 pool.returnObject(c);//把对象归还给池子 ``` 可以极大程度提高FTP响应速度。