Apache FTP操作

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();

	}

}

 注:如果发现上传时创建文件夹而无法写入的情况,请不要慌,关闭防火墙就可以了

猜你喜欢

转载自see-you-again.iteye.com/blog/2258032
今日推荐