`
king520
  • 浏览: 174566 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
文章分类
社区版块
存档分类
最新评论

公用ftp工具组件

 
阅读更多

代码:

FtpTool

package com.wirelesscity.tools.ftp;

import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.StringTokenizer;

import com.wirelesscity.common.StringUtil;

import sun.net.TelnetInputStream;
import sun.net.TelnetOutputStream;
import sun.net.ftp.FtpClient;

@SuppressWarnings("restriction")
public class FtpTool {

	private FtpClient ftpclient;
	private String ipAddress; // FTP地址
	private int ipPort; // 端口
	private String userName; // 用户名
	private String PassWord; // 密码

	/**
	 * 初始化参数FTPTOOL对象
	 * @param ipAddress
	 * @param ipPort
	 * @param userName
	 * @param PassWord
	 * @throws IOException
	 */
	public FtpTool(String ip, int port, String username, String password)
			throws IOException {
		ipAddress = new String(ip);
		ipPort = port;
		if (StringUtil.isEmpty(String.valueOf(port))) {
			port = 21;
		}
		ftpclient = new FtpClient(ipAddress, ipPort);
		userName = new String(username);
		PassWord = new String(password);
	}

	/**
	 * 登录FTP服务器
	 * 
	 * @throws Exception
	 */
	public void login() throws Exception {
		ftpclient.login(userName, PassWord);
	}

	/**
	 * 退出FTP服务器
	 * 
	 * @throws Exception
	 */
	public void logout() throws Exception {
		// 用ftpclient.closeServer()断开FTP出错时用下更语句退出
		ftpclient.sendServer("QUIT\r\n");
		int reply = ftpclient.readServerResponse(); // 取得服务器的返回信息
		System.out.println("reply:" + reply);
	}

	/**
	 * 在FTP服务器上建立指定的目录,当目录已经存在的情下不会影响目录下的文件,这样用以判断FTP
	 * 上传文件时保证目录的存在目录格式必须以"/"根目录开头
	 * 
	 * @param pathList
	 *            String
	 * @throws Exception
	 */
	public void buildList(String pathList) throws Exception {
		ftpclient.ascii();
		StringTokenizer s = new StringTokenizer(pathList, "/"); // sign
		int count = s.countTokens();
		String pathName = "";
		while (s.hasMoreElements()) {
			pathName = pathName + "/" + (String) s.nextElement();
			try {
				ftpclient.sendServer("XMKD " + pathName + "\r\n");
			} catch (Exception e) {
				e = null;
			}
			int reply = ftpclient.readServerResponse();
		}
		ftpclient.binary();
	}

	/**
	 * 取得指定目录下的所有文件名,不包括目录名称 分析nameList得到的输入流中的数,得到指定目录下的所有文件名
	 * 
	 * @param fullPath
	 *            String
	 * @return ArrayList
	 * @throws Exception
	 */
	public ArrayList fileNames(String fullPath) throws Exception {
		ftpclient.ascii(); // 注意,使用字符模式
		TelnetInputStream list = ftpclient.nameList(fullPath);
		byte[] names = new byte[2048];
		int bufsize = 0;
		bufsize = list.read(names, 0, names.length); // 从流中读取
		list.close();
		ArrayList namesList = new ArrayList();
		int i = 0;
		int j = 0;
		while (i < bufsize) {
			if (names[i] == 10) { // 字符模式为10,二进制模式为13
				// 文件名在数据中开始下标为j,i-j为文件名的长度,文件名在数据中的结束下标为i-1
				String tempName = new String(names, j, i - j);
				namesList.add(tempName);
				j = i + 1; // 上一次位置字符模式
			}
			i = i + 1;
		}
		return namesList;
	}

	/**
	 * 上传文件到FTP服务器,destination路径以FTP服务器的"/"开始,带文件名、 上传文件只能使用二进制模式,当文件存在时再次上传则会覆盖
	 * 
	 * @param source
	 *            String
	 * @param destination
	 *            String
	 * @throws Exception
	 */
	public void upFile(String source, String destination) throws Exception {
		buildList(destination.substring(0, destination.lastIndexOf("/")));
		ftpclient.binary(); // 此行代码必须放在buildList之后
		TelnetOutputStream ftpOut = ftpclient.put(destination);
		TelnetInputStream ftpIn = new TelnetInputStream(new FileInputStream(
				source), true);
		byte[] buf = new byte[204800];
		int bufsize = 0;
		while ((bufsize = ftpIn.read(buf, 0, buf.length)) != -1) {
			ftpOut.write(buf, 0, bufsize);
		}
		ftpIn.close();
		ftpOut.close();

	}

	/**
	 * JSP中的流上传到FTP服务器, 上传文件只能使用二进制模式,当文件存在时再次上传则会覆盖 字节数组做为文件的输入流,此方法适用于JSP中通过
	 * request输入流来直接上传文件在RequestUpload类中调用了此方法, destination路径以FTP服务器的"/"开始,带文件名
	 * 
	 * @param sourceData
	 *            byte[]
	 * @param destination
	 *            String
	 * @throws Exception
	 */
	public void upFile(byte[] sourceData, String destination) throws Exception {
		buildList(destination.substring(0, destination.lastIndexOf("/")));
		ftpclient.binary(); // 此行代码必须放在buildList之后
		TelnetOutputStream ftpOut = ftpclient.put(destination);
		ftpOut.write(sourceData, 0, sourceData.length);
		// ftpOut.flush();
		ftpOut.close();
	}

	/**
	 * 从FTP文件服务器上下载文件SourceFileName,到本地destinationFileName 所有的文件名中都要求包括完整的路径名在内
	 * 
	 * @param SourceFileName
	 *            String
	 * @param destinationFileName
	 *            String
	 * @throws Exception
	 */
	public void downFile(String SourceFileName, String destinationFileName)
			throws Exception {
		ftpclient.binary(); // 一定要使用二进制模式
		TelnetInputStream ftpIn = ftpclient.get(SourceFileName);
		byte[] buf = new byte[204800];
		int bufsize = 0;
		FileOutputStream ftpOut = new FileOutputStream(destinationFileName);
		while ((bufsize = ftpIn.read(buf, 0, buf.length)) != -1) {
			ftpOut.write(buf, 0, bufsize);
		}
		ftpOut.close();
		ftpIn.close();
	}

	/**
	 * 从FTP文件服务器上下载文件,输出到字节数组中
	 * 
	 * @param SourceFileName
	 *            String
	 * @return byte[]
	 * @throws Exception
	 */
	public byte[] downFile(String SourceFileName) throws Exception {
		ftpclient.binary(); // 一定要使用二进制模式
		TelnetInputStream ftpIn = ftpclient.get(SourceFileName);
		ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
		byte[] buf = new byte[204800];
		int bufsize = 0;

		while ((bufsize = ftpIn.read(buf, 0, buf.length)) != -1) {
			byteOut.write(buf, 0, bufsize);
		}
		byte[] return_arraybyte = byteOut.toByteArray();
		byteOut.close();
		ftpIn.close();
		return return_arraybyte;
	}

}
FtpServiceImpl

package com.wirelesscity.tools.ftp;

import java.io.IOException;

public class FtpServiceImpl implements FtpService{
	
	private String ftpIpAddress;
	private int ftpPort;
	private String ftpUserName;
	private String ftpPassword;
	
	//FTP路径配置
	private String ftpLocalPathRoot;
	private String ftpRemotePathRoot;
	
	public String getFtpLocalPathRoot() {
		return ftpLocalPathRoot;
	}

	public void setFtpLocalPathRoot(String ftpLocalPathRoot) {
		this.ftpLocalPathRoot = ftpLocalPathRoot;
	}

	public String getFtpRemotePathRoot() {
		return ftpRemotePathRoot;
	}

	public void setFtpRemotePathRoot(String ftpRemotePathRoot) {
		this.ftpRemotePathRoot = ftpRemotePathRoot;
	}

	public void setFtpIpAddress(String ftpIpAddress) {
		this.ftpIpAddress = ftpIpAddress;
	}

	public void setFtpPort(int ftpPort) {
		this.ftpPort = ftpPort;
	}

	public void setFtpUserName(String ftpUserName) {
		this.ftpUserName = ftpUserName;
	}

	public void setFtpPassword(String ftpPassword) {
		this.ftpPassword = ftpPassword;
	}
	
	public String getFtpIpAddress() {
		return ftpIpAddress;
	}

	public int getFtpPort() {
		return ftpPort;
	}

	public String getFtpUserName() {
		return ftpUserName;
	}

	public String getFtpPassword() {
		return ftpPassword;
	}
	
	public void testUpload(){
		// TODO Auto-generated method stub
		try {
			FtpTool ftpTool = new FtpTool(this.getFtpIpAddress(),
					this.getFtpPort(), this.getFtpUserName(),
					this.getFtpPassword());
			ftpTool.login();
			ftpTool.buildList("file/user/tttt");

			String source = "D:/config.rar";
			String destination = "/file/user/tttt/test.jar";
			ftpTool.upFile(source, destination);
			ftpTool.logout();

		} catch (IOException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 建立文件夹路径
	 * @param pathList
	 * @throws Exception
	 */
	public void buildList(String pathList) throws Exception{
		FtpTool ftpTool = new FtpTool(this.getFtpIpAddress(),
				this.getFtpPort(), this.getFtpUserName(),
				this.getFtpPassword());
		ftpTool.login();
		ftpTool.buildList(pathList);
		ftpTool.logout();
	}
	
	
	/**
	 * 上传文件到FTP服务器,
	 * destination路径以FTP服务器的"/"开始,
	 * 带文件名、 上传文件只能使用二进制模式,当文件存在时再次上传则会覆盖
	 * @param source
	 *            String
	 * @param destination
	 *            String
	 * @throws Exception
	 */
	public void upFile(String source, String destination) throws Exception{
		FtpTool ftpTool = new FtpTool(this.getFtpIpAddress(),
				this.getFtpPort(), this.getFtpUserName(),
				this.getFtpPassword());
		ftpTool.login();
		ftpTool.upFile(source, destination);
		ftpTool.logout();
	}
	
	
	/**
	 * JSP中的流上传到FTP服务器, 上传文件只能使用二进制模式,当文件存在时再次上传则会覆盖 字节数组做为文件的输入流,此
	 * 方法适用于JSP中通过
	 * request输入流来直接上传文件在RequestUpload类中调用了此方法, 
	 * destination路径以FTP服务器的"/"开始,带文件名
	 * @param sourceData
	 *            byte[]
	 * @param destination
	 *            String
	 * @throws Exception
	 */
	public void upFile(byte[] sourceData, String destination) throws Exception {
		FtpTool ftpTool = new FtpTool(this.getFtpIpAddress(),
				this.getFtpPort(), this.getFtpUserName(),
				this.getFtpPassword());
		ftpTool.login();
		ftpTool.upFile(sourceData, destination);
		ftpTool.logout();
	}
	
	

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		FtpServiceImpl ftpUtil=new FtpServiceImpl();
		ftpUtil.testUpload();

	}

}
FtpService:

package com.wirelesscity.tools.ftp;

public interface FtpService{
	
	public String getFtpLocalPathRoot() ;
	
	public String getFtpRemotePathRoot();
	
	public void testUpload();
	
	/**
	 * 建立文件夹路径
	 * @param pathList
	 * @throws Exception
	 */
	public void buildList(String pathList) throws Exception;
	
	/**
	 * 上传文件到FTP服务器,
	 * destination路径以FTP服务器的"/"开始,
	 * 带文件名、 上传文件只能使用二进制模式,当文件存在时再次上传则会覆盖
	 * @param source
	 *            String
	 * @param destination
	 *            String
	 * @throws Exception
	 */
	public void upFile(String source, String destination) throws Exception;
	
	
	/**
	 * JSP中的流上传到FTP服务器, 上传文件只能使用二进制模式,当文件存在时再次上传则会覆盖 字节数组做为文件的输入流,此
	 * 方法适用于JSP中通过
	 * request输入流来直接上传文件在RequestUpload类中调用了此方法, 
	 * destination路径以FTP服务器的"/"开始,带文件名
	 * @param sourceData
	 *            byte[]
	 * @param destination
	 *            String
	 * @throws Exception
	 */
	public void upFile(byte[] sourceData, String destination) throws Exception ;
	
	

}

分享到:
评论

相关推荐

    win7_ftp服务器配置

    在Windows 7 操作系统中,FTP 服务器是作为一个可选组件存在的,需要手动安装。打开控制面板,选择“程序”选项,然后找到“打开或关闭 Windows 功能”,在列表中选择“Internet 信息服务”(展开),然后选中 FTP ...

    FTPWEB服务器的配置与维护.docx

    在“应用程序服务器子组件”窗口中,需要单击以选中“公用文件”、“文件传输协议 (FTP) 服务”“、Internet 信息服务管理器”复选框。 3. 新建 FTP 站点 要新建 FTP 站点,需要右击“Internet 信息服务”树下...

    配置DHCP、FTP、WEB、DNS服务器.doc

    2. 配置 WEB 服务器:在管理工具中,右击 WEB 服务器选项,选择“Internet 信息服务”,设置公用文件和万维网服务选项,建立网站并绑定 IP 地址。 FTP(File Transfer Protocol)服务器是一个提供文件传输服务的...

    2022年市场-计算机维护及FTP服务器的搭建.pptx

    配置FTP服务器需要了解"IIS"(Internet Information Services),这是Windows操作系统中的一个组件,用于管理和提供多种网络服务,包括FTP服务。设置FTP服务器涉及创建站点、定义权限、设置用户访问等步骤。 总之,...

    网站服务器的搭建与配置.doc

    Windows 2000 安装光盘,打开控制面板,添加/删除程序,添加 Windows 组件,选择 Internet 信息服务(IIS),然后选择需要安装的组件,例如公用文件、文档、FrontPage 2000 服务扩展、Internet 服务管理工具、World ...

    IIS技巧:网站服务器的搭建与配置.pdf

    (4) 选择需要的组件,如公用文件、文档、FrontPage 2000服务扩展、Internet服务管理工具(HTML和非HTML版本)、World Wide Web服务器、FTP服务器和SMTP服务。 (5) 确认所有必要的组件都被选中后,点击【确定】,然后...

    netflix-commons-util-0.1.1.zip

    标题中的"Netflix Commons Util 0.1.1"是一个开源项目的版本标识,它指的是Netflix公司开发的一个公用工具库。Netflix Commons是Netflix公司贡献的一系列Java库,旨在提供一系列通用的工具类和实用程序,帮助开发者...

    IIS技巧网站服务器的搭建与配置.docx

    * 公用文件:各组件都需要的通用程序和数据文件。 * 文档:包括站点的缺省内容、站点管理的主题以及关于ASP的文档和样例。 * FrontPage 2000效劳扩展:提供对FrontPage 2000的额外支持,鉴于兼容性,建议安装此项。 ...

    hutool文档pdf

    Hutool的诞生减少了开发人员在项目中重复编写公用工具类和方法的时间,降低了学习新API的成本,同时也降低了潜在的bug风险。 Hutool的核心特性在于其丰富的工具方法,覆盖了文件操作、流处理、加密解密、字符编码...

    ASPWEB服务器配置借鉴.pdf

    - **公用文件**:提供各组件共享的通用程序和数据。 - **文档**:包含默认内容、管理主题以及ASP文档和示例。 - **FrontPage 2000服务扩展**:增强对FrontPage 2000的支持,建议安装以确保兼容性。 - **Internet...

    IIS技巧:网站服务器的搭建与配置[整理].pdf

    - 公用文件:为各组件提供通用程序和数据。 - 文档:包含网站的默认内容、管理主题和ASP文档示例。 - FrontPage 2000服务扩展:增强FrontPage 2000支持,建议安装以确保兼容性。 - Internet服务管理工具:本地...

    ASPWEB服务器配置[归纳].pdf

    - 公用文件:包含多个组件共享的程序和数据。 - 文档:包含默认内容、管理主题和ASP文档样本。 - FrontPage 2000服务扩展:增强对FrontPage 2000的支持。 - Internet服务管理工具:用于本地站点管理。 - ...

    IIS6.0 + webLogic10 集群 整合

    而“工具”可能包括Microsoft Management Console (MMC)、webLogic管理控制台、IIS管理工具等,用于管理和配置这两个组件。 7. **IIS_Weblogic.docx**: 这个文档很可能包含了详细的步骤指南,包括配置截图、命令行...

    Linux系统在企业信息化建设中的应用.pdf

    在本文中,Samba被用来创建两个不同的共享区域:一个是公司公用文件区(100GB),只允许读取,不允许上传或删除文件;另一个是公共交换区(50GB),所有局域网内的用户都可以进行读取、上传和删除操作,以促进文件...

    IIS用到的所有涉及文件!测试可以适用于XP、windows2003

    7. **iertutil.dll**:这是Internet Explorer的公用实用工具库,虽然不是直接与IIS关联,但可能在处理网页内容或与其他IE相关的功能交互时被调用。 8. **aqadmin.rar** 和 **iertutil.dll(www.greenxf.com).rar**:...

    09年下半年网管上午

    在Windows 2003中安装FTP服务,需在“应用程序服务器”选项的 (1) 组件 复选框中选择“文件传输协议(FTP)服务”进行安装。 (1)备选答案: A. ASP.NET B. Internet信息服务(IIS) C. 应用程序服务器控制台 D. ...

Global site tag (gtag.js) - Google Analytics