`
yangmeng_3331
  • 浏览: 88422 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

使用Apache commons-net.jar开发FTP工具类

    博客分类:
  • Java
阅读更多
    最开始使用jdk自带的rt.jar开发FTP工具类,后来发现中文乱码,本机windows是GBK,工程utf-8的,大概看了下jdk的FtpClient的基类NetworkClient默认输出的编码是ISO8859_1。后来决定使用apache的commons-net.jar来开发。下面是具体代码
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.SocketException;
import java.util.TimeZone;

import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPClientConfig;
import org.apache.commons.net.ftp.FTPReply;



public class FtpTest {
	
	private FTPClient ftpClient;
	
	/**
	 * 链接ftp
	 * @param ip 地址
	 * @param port 端口号
	 * @param user 用户名
	 * @param password 密码
	 * @param path 路径
	 */
	public void connectServer(String ip,int port,String user,String password,String path) {
		try {
			this.ftpClient = new FTPClient();
			FTPClientConfig config = new FTPClientConfig(FTPClientConfig.SYST_NT);//适用的系统
			config.setServerTimeZoneId(TimeZone.getDefault().getID());//获取主机默认时区
			this.ftpClient.setControlEncoding("GBK");
			this.ftpClient.configure(config);
			this.ftpClient.connect(ip, port);
			int reply = this.ftpClient.getReplyCode();
			//ftp服务器链接响应,已2开头通过
			if(!FTPReply.isPositiveCompletion(reply)) {
				//响应异常断开连接
				System.out.println("链接失败!");
				this.ftpClient.disconnect();
			}
			this.ftpClient.login(user, password);
			this.ftpClient.changeWorkingDirectory(path);
			this.ftpClient.setFileType(FTPClient.FILE_STRUCTURE);//设置文件传输类型
			System.out.println("登陆成功,当前所在目录:"+this.ftpClient.printWorkingDirectory());
		} catch (SocketException e) {
			System.out.println("链接FTP服务器失败!");
			e.printStackTrace();
		} catch (IOException e) {
			System.out.println("登陆FTP服务器失败!");
			e.printStackTrace();
		}
	}
	
	/**
	 * 关闭FTP服务器连接 
	 *@data 2014-6-10 下午1:51:40
	 */
	public void closeFtp() {
		if(null != this.ftpClient && this.ftpClient.isConnected()) {
			try {
				boolean rs = this.ftpClient.logout();
				if(rs) {
					System.out.println("退出并关闭FTP服务器连接!");
				}
			} catch (IOException e) {
				e.printStackTrace();
				System.out.println("退出FTP服务器发生异常!");
			} finally {
				try {
					this.ftpClient.disconnect();
				} catch (IOException e) {
					e.printStackTrace();
					System.out.println("强制关闭异常的FTP服务器链接!");
				}
			}
		}
	}
	
	/**
	 * 下载文件,测试通过2GB大小文件,具体看网络环境。
	 * @param localFilePath 本地路径及文件名
	 * @param remoteFileName ftp文件目录及文件名,如/test.doc.目录前必须有/否则会找不到文件
	 * @return
	 */
	public boolean downloadFile(String localFilePath, String remoteFileName) {
		BufferedOutputStream outStream = null;
		boolean rs = false;
		try {
			outStream = new BufferedOutputStream(new FileOutputStream(localFilePath));
			rs = this.ftpClient.retrieveFile(remoteFileName, outStream);
			System.out.println("文件下载成功!");
		} catch (FileNotFoundException e) {
			e.printStackTrace();
			System.out.println("本地文件未找到!");
		} catch (IOException e) {
			e.printStackTrace();
			System.out.println("文件下载发生异常!");
		} finally {
			if(outStream != null) {
				try {
					outStream.flush();
					outStream.close();
				} catch (IOException e) {
					e.printStackTrace();
					System.out.println("文件传输关闭异常!");
				}
			}
		}
		return rs;
	}
	
	/**
	 * 下载文件,测试通过2GB大小文件,具体看网络环境。
	 * @param localFile 本地文件
	 * @param remoteFileName FTP服务器文件目录及文件名
	 * @return
	 */
	public boolean downloadFile(File localFile, String remoteFileName) {
		BufferedOutputStream outStream = null;  
        FileOutputStream outStr = null;
        boolean rs = false;
        try {
			outStr = new FileOutputStream(localFile);
			outStream = new BufferedOutputStream(outStr);
			rs = this.ftpClient.retrieveFile(remoteFileName, outStream);
			System.out.println("文件下载成功!");
		} catch (FileNotFoundException e) {
			e.printStackTrace();
			System.out.println("本地文件未找到!");
		} catch (IOException e) {
			e.printStackTrace();
			System.out.println("文件下载发生异常!");
		} finally {
			try {
				if(null != outStream) {
					outStream.flush();
					outStream.close();
				}
			} catch (Exception e) {
				e.printStackTrace();
				System.out.println("文件传输关闭异常!");
			} finally {
				if (null != outStr) {  
                    try {  
                        outStr.flush();  
                        outStr.close();  
                    } catch (IOException e) {  
                        e.printStackTrace();  
        				System.out.println("文件输出关闭异常!");
                    }  
                }
			}
		}
        return rs;
	}
	
	/**
	 * 文件上传
	 * @param localFilePath 文件本地路径
	 * @param remoteFileName 上传到FTP服务器路径级文件名
	 * @return
	 */
	public boolean uploadFile(String localFilePath, String remoteFileName) {
		BufferedInputStream inStream = null;
		boolean rs = false;
		try {
			inStream = new BufferedInputStream(new FileInputStream(localFilePath));
			rs = this.ftpClient.storeFile(remoteFileName, inStream);
			System.out.println("文件上传成功!");
		} catch (FileNotFoundException e) {
			e.printStackTrace();
			System.out.println("本地文件未找到!");
		} catch (IOException e) {
			e.printStackTrace();
			System.out.println("文件上传发生异常!");
		} finally {  
            if (inStream != null) {  
                try {  
                    inStream.close();  
                } catch (IOException e) {  
                    e.printStackTrace();  
    				System.out.println("文件传输关闭异常!");
                }  
            }  
        }
		return rs;
	}
	
	/**
	 * 文件上传
	 * @param localFile 本地文件
	 * @param remoteFileName 上传到FTP服务器路径级文件名
	 * @return
	 */
	public boolean uploadFile(File localFile, String remoteFileName) {
		BufferedInputStream inStream = null;
		boolean rs = false;
		try {
			inStream = new BufferedInputStream(new FileInputStream(localFile));
			rs = this.ftpClient.storeFile(remoteFileName, inStream);
			System.out.println("文件上传成功!");
		} catch (FileNotFoundException e) {
			e.printStackTrace();
			System.out.println("本地文件未找到!");
		} catch (IOException e) {
			e.printStackTrace();
			System.out.println("文件上传发生异常!");
		} finally {  
            if (inStream != null) {  
                try {  
                    inStream.close();  
                } catch (IOException e) {  
                    e.printStackTrace();  
                }  
            }  
        }
		return rs;
	}

	/**
	 * 变更工作目录
	 * @param dir 需变更到的工作目录
	 */
	public void changeDir(String dir) {
		try {
			this.ftpClient.changeWorkingDirectory(dir);
			System.out.println("当前工作目录为:" + dir);
		} catch (IOException e) {
			e.printStackTrace();
			System.out.println("变更工作目录:" + dir + "时出错!");
		}
	}
	
	/**
	 * 返回上级目录 
	 */
	public void toParentDir() {  
        try {  
            this.ftpClient.changeToParentDirectory();  
            System.out.println("成功返回上级目录!");
            System.out.println("当前工作目录为:" + this.ftpClient.printWorkingDirectory());
        } catch (IOException e) {  
            e.printStackTrace();  
            System.out.println("返回上级目录时出错!");  
        }  
    }
	
	/**
	 * 查询某目录下所有下文件目录
	 * @return
	 */
	public String[] getListFiles(String path){
		String files[] = null;  
        try {  
        	if (null == path || "".equals(path)) {
				path = "/";
			}
            files = this.ftpClient.listNames(path);  
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
        return files;
	}
	
	public static void main(String[] args) {
		try {
			FtpTest ftp = new FtpTest();
			ftp.connectServer("192.168.1.133", 21, "ftpAdmin", "admin", "/");
//			ftp.downloadFile("d://LOL_V3.1.2.0-V3.1.2.1_PATCH.exe", "/LOL_V3.1.2.0-V3.1.2.1_PATCH.exe");
//			ftp.downloadFile(new File("d://test.zip"), "/test.zip");
//			ftp.uploadFile("d://test.zip", "/ym/test.zip");
//			ftp.uploadFile(new File("d://test.zip"), "/test.zip");
			ftp.changeDir("/fasdfasym");
//			ftp.toParentDir();
//			String[] files = ftp.getListFiles("null");
			String[] files = ftp.getListFiles("/ym");
			for (String s : files) {
				System.out.println(s);
			}
			ftp.closeFtp();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}
分享到:
评论

相关推荐

    apache-commons源码及jar文件

    Commons-Lang 提供了许多许多通用的工具类集,提供了一些java.lang中类的扩展功能 Latka Commons-Latka 是一个HTTP 功能测试包,用于自动化的QA,验收和衰减测试. Launcher Launcher 组件是一个交叉平台的Java 应用...

    前端-后端java的Util类的工具类

    ├─28个java常用的工具类 │ │ Base64.java │ │ Base64DecodingException.java │ │ CConst.java │ │ CharTools.java │ │ ConfigHelper.java │ │ Counter.java │ │ CTool.java │ │ DateHandler.java ...

    java开源包10

    PortGroper 是一款java写的开源拒绝服务测试工具,它不是僵尸网络类的ddos,而是使用大量的代理作为bots发起DDOS。Port Groper可以与用测试防火墙,干扰web 统计脚本的跟踪,为网站增加流量..往好了用什么都能干,就是...

    java开源包1

    PortGroper 是一款java写的开源拒绝服务测试工具,它不是僵尸网络类的ddos,而是使用大量的代理作为bots发起DDOS。Port Groper可以与用测试防火墙,干扰web 统计脚本的跟踪,为网站增加流量..往好了用什么都能干,就是...

    java开源包8

    PortGroper 是一款java写的开源拒绝服务测试工具,它不是僵尸网络类的ddos,而是使用大量的代理作为bots发起DDOS。Port Groper可以与用测试防火墙,干扰web 统计脚本的跟踪,为网站增加流量..往好了用什么都能干,就是...

    java开源包101

    PortGroper 是一款java写的开源拒绝服务测试工具,它不是僵尸网络类的ddos,而是使用大量的代理作为bots发起DDOS。Port Groper可以与用测试防火墙,干扰web 统计脚本的跟踪,为网站增加流量..往好了用什么都能干,就是...

    java开源包11

    PortGroper 是一款java写的开源拒绝服务测试工具,它不是僵尸网络类的ddos,而是使用大量的代理作为bots发起DDOS。Port Groper可以与用测试防火墙,干扰web 统计脚本的跟踪,为网站增加流量..往好了用什么都能干,就是...

    java开源包2

    PortGroper 是一款java写的开源拒绝服务测试工具,它不是僵尸网络类的ddos,而是使用大量的代理作为bots发起DDOS。Port Groper可以与用测试防火墙,干扰web 统计脚本的跟踪,为网站增加流量..往好了用什么都能干,就是...

    java开源包3

    PortGroper 是一款java写的开源拒绝服务测试工具,它不是僵尸网络类的ddos,而是使用大量的代理作为bots发起DDOS。Port Groper可以与用测试防火墙,干扰web 统计脚本的跟踪,为网站增加流量..往好了用什么都能干,就是...

    java开源包6

    PortGroper 是一款java写的开源拒绝服务测试工具,它不是僵尸网络类的ddos,而是使用大量的代理作为bots发起DDOS。Port Groper可以与用测试防火墙,干扰web 统计脚本的跟踪,为网站增加流量..往好了用什么都能干,就是...

    java开源包5

    PortGroper 是一款java写的开源拒绝服务测试工具,它不是僵尸网络类的ddos,而是使用大量的代理作为bots发起DDOS。Port Groper可以与用测试防火墙,干扰web 统计脚本的跟踪,为网站增加流量..往好了用什么都能干,就是...

    java开源包4

    PortGroper 是一款java写的开源拒绝服务测试工具,它不是僵尸网络类的ddos,而是使用大量的代理作为bots发起DDOS。Port Groper可以与用测试防火墙,干扰web 统计脚本的跟踪,为网站增加流量..往好了用什么都能干,就是...

    java开源包7

    PortGroper 是一款java写的开源拒绝服务测试工具,它不是僵尸网络类的ddos,而是使用大量的代理作为bots发起DDOS。Port Groper可以与用测试防火墙,干扰web 统计脚本的跟踪,为网站增加流量..往好了用什么都能干,就是...

    java开源包9

    PortGroper 是一款java写的开源拒绝服务测试工具,它不是僵尸网络类的ddos,而是使用大量的代理作为bots发起DDOS。Port Groper可以与用测试防火墙,干扰web 统计脚本的跟踪,为网站增加流量..往好了用什么都能干,就是...

    Java资源包01

    PortGroper 是一款java写的开源拒绝服务测试工具,它不是僵尸网络类的ddos,而是使用大量的代理作为bots发起DDOS。Port Groper可以与用测试防火墙,干扰web 统计脚本的跟踪,为网站增加流量..往好了用什么都能干,就是...

    JAVA上百实例源码以及开源项目源代码

    使用时候只需在控制台窗口执行jar就可以了。 Java 3DMenu 界面源码 5个目标文件 内容索引:Java源码,窗体界面,3DMenu  Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,...

    JAVA上百实例源码以及开源项目

    使用时候只需在控制台窗口执行jar就可以了。 Java 3DMenu 界面源码 5个目标文件 内容索引:Java源码,窗体界面,3DMenu  Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,...

Global site tag (gtag.js) - Google Analytics