pom:
<dependency> <groupId>commons-net</groupId> <artifactId>commons-net</artifactId> <version>3.0.1</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.0.1</version> </dependency> <dependency> <groupId>commons-dbcp</groupId> <artifactId>commons-dbcp</artifactId> <version>1.4</version> </dependency>
FtpConManager:
import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPReply; /** *FTP 管理 *<br>使用简单工厂方法 * */ public class FtpConManager { private FtpConManager(){} private static FtpConManager instance; private FTPClient ftpClient =null; /** * 获取实例 * get FtpConManager * @return FtpConManager */ public synchronized static FtpConManager getInstance(){ if( instance == null ){ instance = new FtpConManager(); } return instance; } /** * <p>ftp登录</p> * @param s_url ftp IP地址 * @param uname 用户名 * @param pass 密码 */ public void login(String hostIP,String username,String password){ ftpClient = new FTPClient(); try{ //连接 ftpClient.connect(hostIP); ftpClient.login(username,password); //检测连接是否成功 int reply = ftpClient.getReplyCode(); if(!FTPReply.isPositiveCompletion(reply)) { this.closeCon(); System.out.println("FTP 连接失败!"); System.exit(1); }else{ System.out.println("FTP 连接成功!"); } }catch(Exception ex){ ex.printStackTrace(); //关闭 this.closeCon(); } } /** * 上传文件 * @param localFilePath 本地路径及名字 * @param newFileName FTP上的路径及名字 * @return */ public boolean uploadFile(String localPathAndName,String fptPathAndName){ boolean flag = false ; if( ftpClient!=null ){ BufferedInputStream buffIn=null; try{ buffIn=new BufferedInputStream(new FileInputStream(localPathAndName)); flag = ftpClient.storeFile(fptPathAndName, buffIn); }catch(Exception e){ e.printStackTrace(); }finally{ try{ if(buffIn!=null) buffIn.close(); }catch(Exception e){ e.printStackTrace(); } } } return flag ; } /** * 下载文件 * @param remoteFileName FTP上的路径及名字 * @param localFileName 本地路径及名字 */ public boolean downloadFile(String remotePathAndName,String localPathAndName){ boolean flag = false ; if( ftpClient!=null ){ BufferedOutputStream buffOut=null; try{ buffOut=new BufferedOutputStream(new FileOutputStream(localPathAndName)); flag = ftpClient.retrieveFile(remotePathAndName, buffOut); }catch(Exception e){ e.printStackTrace(); }finally{ try{ if(buffOut!=null) buffOut.close(); }catch(Exception e){ e.printStackTrace(); } } } return flag ; } /** * * <p>删除ftp上的文件</p> * @param srcFname * @return true || false */ public boolean removeFile(String srcFname){ boolean flag = false; if( ftpClient!=null ){ try { flag = ftpClient.deleteFile(srcFname); } catch (IOException e) { e.printStackTrace(); this.closeCon(); } } return flag; } /** *<p>销毁ftp连接</p> */ public void closeCon(){ if(ftpClient !=null){ if(ftpClient.isConnected()){ try { ftpClient.logout(); ftpClient.disconnect(); } catch (IOException e) { e.printStackTrace(); } } } } }
FtpNetTest:
public class FtpNetTest { /** * @param args */ public static void main(String[] args) { FtpConManager.getInstance().login("xxx.xxx.xxx.xxx", "xxx", "xxx"); // boolean flag = FtpConManager.getInstance().uploadFile("i:/4/dog.txt", "dog.txt"); boolean flag =FtpConManager.getInstance().uploadFile("i:/4/dog.txt", "xx/dog.txt"); // boolean flag =FtpConManager.getInstance().loadFile("20150626/dog.txt", "i:/4/dog2.txt") ; // boolean flag = FtpConManager.getInstance().removeFile("aa/a.txt"); System.out.println("操作结果:"+flag); FtpConManager.getInstance().closeCon(); } }
注:如果发现上传时创建文件夹而无法写入的情况,请不要慌,关闭防火墙就可以了。