`
yangmeng_3331
  • 浏览: 89450 次
  • 性别: 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的FTP包commons-net-1.4.1.jar,jakarta-oro-2.0.8.jar

    Apache的FTP库是Java开发中一个非常实用的工具,它主要包含了两个核心的JAR包:`commons-net-1.4.1.jar`和`jakarta-oro-2.0.8.jar`。这两个包提供了丰富的功能,允许开发者在Java应用中实现FTP(文件传输协议)的...

    commons-net-3.6.jar

    总结,Apache Commons Net 3.6是Java开发中处理FTP操作的强大工具,它提供了一套全面的API,使得FTP文件的上传下载、读写等操作变得简单易行。通过深入研究源码,开发者不仅可以提升代码质量,还能更好地理解和应对...

    commons-net-ftp-2.0.jar.zip

    《Apache Commons Net FTP库在Java开发中的应用》 Apache Commons Net是一个Java库,它提供了对各种网络协议的支持,其中就包括FTP(File Transfer Protocol)协议。在这个特定的案例中,我们关注的是`commons-...

    commons-net-jar包.zip

    Apache Commons Net库提供了一整套用于网络编程的类和实用程序,涵盖了FTP、Telnet、NNTP、SMTP等多种网络协议,以及TCP套接字、UDP套接字和日期转换等通用工具。这个库的目的是简化Java中的网络编程,使开发者能够...

    commons-net-1.4.1.jar

    Apache Commons Net 是一个由Apache软件基金会开发的Java库,主要用于网络协议的实现。在这个版本中,我们聚焦于"commons-net-1.4.1.jar",这是一个专注于FTP(文件传输协议)功能的组件。该库为Java开发者提供了...

    commons-net-3.3.jar

    《Apache Commons Net 3.3:FTP开发利器详解》 Apache Commons Net库是Apache软件基金会的一个项目,专注于网络协议的实现,尤其是FTP(文件传输协议)相关的功能。在这个3.3版本的jar包中,开发者可以找到一系列...

    ftp所需jar包(commons-net-1.4.1.jar,jakarta-oro-2.0.8.jar)

    在实际开发中,可能还需要处理异常,如网络错误、认证失败等,并且为了提高代码的可读性和复用性,通常会将这些步骤封装到单独的FTP服务类或工具类中。 总结来说,`commons-net-1.4.1.jar` 和 `jakarta-oro-2.0.8....

    jar包-commons-net-3.3.jar

    这个JAR文件包含了Apache Commons Net库的所有类和资源,可以直接被Java项目引用和使用。 **Apache Commons Net库知识点详解:** Apache Commons Net库是Java开发者在处理网络通信时的重要工具,它提供了以下关键...

    commons-net-3.6.jarjakarta-oro-2.0.8.jar

    Apache Commons Net是Apache软件基金会的一个项目,提供了一系列的网络实用工具和协议实现,包括FTP。`commons-net-3.6.jar` 是这个项目的库文件,包含了完整的FTP客户端API和其他网络相关的功能,如TCP套接字、NNTP...

    commons-net-2.0.jar

    总结,`commons-net-2.0.jar`作为Java FTP操作的重要工具,极大地简化了FTP通信的代码实现,使得开发者能够专注于业务逻辑,而无需关心底层网络协议的细节。通过学习和使用这个库,我们可以高效、稳定地进行文件的...

    commons-net-3.3.jar、jakarta-oro-2.0.8.jar、javacsv.jar

    FTP连接jar包是一类专门用于处理FTP通信的Java库,它们可以帮助开发者简化FTP客户端的实现过程。本篇将详细介绍标题中提及的三个jar包——"commons-net-3.3.jar"、"jakarta-oro-2.0.8.jar"和"javacsv.jar",以及它们...

    commons-net-2.2.jar_JAR包源码

    在Java开发中,Apache Commons Net库是一个非常重要的工具集,它提供了多种网络协议的实现,包括FTP(文件传输协议)。`commons-net-2.2.jar`是这个库的一个版本,其中包含了FTP文件上传功能的源代码。本文将深入...

    commons-net-3.2.jar

    在Java项目中引入"commons-net-3.2.jar",可以通过Maven或Gradle依赖管理工具,或者直接将jar文件添加到项目的类路径中。然后,开发者可以创建对应协议的客户端对象,调用其提供的方法来执行网络操作。例如,使用...

    commons-net-1.4.1.jar功能实现demo

    这个库是Apache Commons Net项目的一部分,它提供了一系列的类和方法来帮助开发者处理各种网络协议,包括FTP、TFTP、NNTP、SMTP等。在Java中,使用这样的第三方库可以简化网络编程,尤其是文件传输的复杂性。 描述...

    aduna-commons-net-2.1.jar.zip

    Aduna Commons Net是Apache软件基金会的一个项目,其核心目标是为Java开发者提供一组用于网络通信的实用工具类。这个版本——2.1,是经过多次迭代和优化后的稳定版本,能够确保在网络操作上的高效性和可靠性。"jar...

    commons-logging-1.2.jar,commons-vfs2-2.2.jar,jxl.jar

    在IT行业中,库和框架是开发者的得力助手,它们提供了丰富的...总的来说,`commons-logging-1.2.jar`、`commons-vfs2-2.2.jar`和`jxl.jar`都是Java开发中非常实用的工具,它们极大地丰富了Java生态,并提升了开发效率。

    commons-net-3.0.1.jar,mysql-connector-java-5.1.22-bin.jar

    Apache Commons Net提供了一系列的类和方法,用于处理各种网络协议,如FTP(文件传输协议)、TFTP(简单文件传输协议)、NNTP(新闻传输协议)和SMTP(简单邮件传输协议)等。开发者可以利用这个库方便地进行文件...

    用org.apache.commons.net.ftp.FTPClient包实现简单文件下载

    在Java编程中,Apache Commons Net库提供了一系列工具类来处理各种网络协议,其中包括FTP(文件传输协议)。在本文中,我们将深入探讨如何使用`org.apache.commons.net.ftp.FTPClient`包来实现简单的文件下载功能。...

Global site tag (gtag.js) - Google Analytics