FTP 常用工具类

FTP 常用工具类

“`java
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.SocketException;
import java.util.ArrayList;

import org.apache.commons.net.PrintCommandListener;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
import org.apache.log4j.Logger;

/**
* Ftp 工具类
* @author zcj
* @Date 2018-06-29
*/
public class FtpUtils {

public static Logger logger = Logger.getLogger(FtpUtils.class);  

public static FTPClient ftp;  
public static ArrayList allFiles;  
public static String host = "192.168.36.225";
public static int port = 21;
public static String loginName = "administrator";
public static String password =  "admin#1234";

//重写构造函数
public FtpUtils( boolean isPrint ){
    ftp = new FTPClient();
    allFiles = new ArrayList();
    // 设置将过程中使用到的命令输出到控制台
    if( isPrint ){
        ftp.addProtocolCommandListener(new PrintCommandListener(new PrintWriter(System.out)));
    }
}

/**
 * 登录Ftp
 * @param host       主机地址
 * @param port       端口
 * @param loginName  登录名
 * @param password   密码
 * @throws IOException 
 * @throws SocketException 
 */
public boolean loginFtp(String host , int port , String loginName , String password) throws SocketException, IOException{
    ftp.connect(host, port);
    if(FTPReply.isPositiveCompletion(ftp.getReplyCode())){  
        boolean isLogin = ftp.login(loginName , password);
        if( isLogin ){  
            ftp.setControlEncoding("utf-8");//中文支持
            ftp.setFileType(FTPClient.BINARY_FILE_TYPE);//二进制传输
            ftp.enterLocalPassiveMode();//每次启动一个端口进行传输
            return true;  
        }  
    }
    //登录不成功关闭连接节省资源
    disConnection();
    return false;
}

/** 
 * 关闭数据链接 
 * @throws IOException 
 */  
public void disConnection() throws IOException{  
    if(ftp.isConnected()){  
        ftp.disconnect();  
    }  
}  
/**
 * 退出FTP
 * @throws IOException 
 */
public boolean logout() throws IOException{
     return ftp.logout();
}
/** 
 * 递归遍历出指定目录下所有文件 
 * @param pathName 需要遍历的目录,必须以"/"开始和结束 
 * @throws IOException 
 */  
public ArrayList ergodicList(String pathName) throws IOException{  
    if( pathName.startsWith("/") && pathName.endsWith("/") ){  
        String directory = pathName;  
        //更换目录到当前目录  
        ftp.changeWorkingDirectory(directory);  
        FTPFile[] files = ftp.listFiles();  
        for( FTPFile file : files ){  
            if( file.isFile() ){  
                allFiles.add( directory+file.getName() );  
            }else if( file.isDirectory() ){  
                ergodicList(directory+file.getName() +File.separatorChar);  
            }  
        }  
    }  
    return allFiles;
}
/**
 * 获取指定路径下的指定的文件名的文件
 * @param pathName 指定路径
 * @param ext 扩展名成
 * @throws IOException
 */
public ArrayList ergodicListExt( String pathName,String ext ) throws IOException{  
    if(pathName.startsWith("/") && pathName.endsWith("/")){  
        String directory = pathName;  
        //切换FTP目录到当前目录  
        ftp.changeWorkingDirectory(directory);  
        FTPFile[] files = ftp.listFiles();  
        for( FTPFile file:files ){  
            if( file.isFile() ){  
                if( file.getName().endsWith(ext) ){  
                    allFiles.add( directory+file.getName() );  
                }  
            }else if( file.isDirectory() ){  
                ergodicListExt( directory+file.getName()+File.separatorChar, ext );  
            }  
        }  
    }  
    return allFiles;
}  
/**
 * 批量下载
 * String localNam 下载的本地路径
 * String pathName 下载的文件主路径
 * @throws IOException 
 */
public void downListFile( String localPath , String pathName ) throws IOException{
     if( pathName.startsWith("/")&&pathName.endsWith("/") ){  
         String directory = pathName;  
         //更换目录到当前目录  
         ftp.changeWorkingDirectory(directory); 
         FTPFile[] files = ftp.listFiles();  
         for(FTPFile file : files){ 
            File localFile = new File(localPath); 
            if( !localFile.exists() ){
                localFile.mkdirs();
            }
            OutputStream is = new FileOutputStream( localFile+"/"+file.getName() );     
            ftp.retrieveFile( file.getName(), is );  
            is.close();    
        }  
     }
}
/**
 * 下载单个文件
 * @param pathName 文件主路径
 * @param localPath 本地路径
 * @param fileName 文件名称
 * @throws IOException 
 * @throws Exception
 */
public boolean downOneFile( String pathName , String localPath , String fileName ) throws IOException{

     if( pathName.startsWith("/")&&pathName.endsWith("/") ){  
          ftp.changeWorkingDirectory(pathName);
          File localFile = new File(localPath );
          if( !localFile.exists() ){
              localFile.mkdirs();
          }
          OutputStream os = new FileOutputStream(localFile+"/"+ fileName);
          ftp.retrieveFile(fileName, os);
          os.close();
     }
    return true;
}

public static void main(String[] args) throws Exception {
    //工具实例化
    FtpUtils ftpUtils = new FtpUtils(true); 
    //登录FTP服务器
    boolean login = ftpUtils.loginFtp(host,port,loginName,password);
    System.out.println("-----------------------登录验证START-------------------------");

    System.out.println("登录结果----》"+login+"<《-----果结录登");

    System.out.println("-----------------------登录验证END-------------------------");
    System.out.println();
    ftpUtils.downOneFile("/QA/AA/201803/","/Users/zcj/Desktop/test/",  "0f459685be2145d3ad8293a8c1cddadb.xlsx");
    //ftpUtils.downListFile("/Users/zcj/Desktop/test/","/QA/AA/201803/");

// System.out.println(“———————–获取某路径下的所有文件START————————-“);
// //获取某个目录下的所有文件路径
// ArrayList list = ftpUtils.ergodicList(“/QA/AA/201803/”);
// for (String string : list) {
// System.out.println(string);
// }
// System.out.println(“———————–获取某路径下的所有文件END————————-“);
//
// System.out.println();
//
// System.out.println(“———————–获取某路径下的指定类型所有文件START————————-“);
// ArrayList listExt = ftpUtils.ergodicListExt(“/QA/AA/201803/”, “xlsx”);
// for (String string : listExt) {
// System.out.println( string );
// }
// System.out.println(“———————–获取某路径下的指定类型所有文件 END————————-“);
}

}

你可能感兴趣的:(学习代码,工作总结)