论坛首页 Java企业应用论坛

使用sun.net.ftp下载、上传文件完整版

浏览 11828 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (1) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-06-20  
package com.northking.dataManager.util;
import sun.net.ftp.*;
import sun.net.*;
import java.io.*;

/**
 * 使用sun.net.ftp工具包进行ftp上传下载
 * @author maochangming
 * @date 2008-6-20  13:09:29
 * @description:
 */
public class FtpTool {
	String ip;
	int port;
	String user;
	String pwd;
	String remotePath;
	String localPath;
	FtpClient ftpClient;

	/**
	 * 连接ftp服务器
	 * @param ip
	 * @param port
	 * @param user
	 * @param pwd
	 * @return
	 * @throws Exception
	 */
	public boolean connectServer(String ip, int port, String user, String pwd)
		throws Exception {
		boolean isSuccess = false;
		try {
			ftpClient = new FtpClient();
			ftpClient.openServer(ip, port);
			ftpClient.login(user, pwd);
			isSuccess = true;
		} catch (Exception ex) {
			throw new Exception("Connect ftp server error:" + ex.getMessage());
		}
		return isSuccess;
	}

	/**
	 * 下载文件
	 * @param remotePath
	 * @param localPath
	 * @param filename
	 * @throws Exception
	 */
	public void downloadFile(String remotePath,String localPath, String filename) throws Exception {
		try {
			if (connectServer(getIp(), getPort(), getUser(), getPwd())) {
				if (remotePath.length() != 0)
					ftpClient.cd(remotePath);
				ftpClient.binary();
				TelnetInputStream is = ftpClient.get(filename);
				File file_out = new File(localPath + File.separator + filename);
				FileOutputStream os = new FileOutputStream(file_out);
				byte[] bytes = new byte[1024];
				int c;
				while ((c = is.read(bytes)) != -1) {
					os.write(bytes, 0, c);
				}
				is.close();
				os.close();
				ftpClient.closeServer();
			}
		} catch (Exception ex) {
			throw new Exception("ftp download file error:" + ex.getMessage());
		}
	}

	/**
	 * 上传文件
	 * @param remotePath
	 * @param localPath
	 * @param filename
	 * @throws Exception
	 */
	public void uploadFile(String remotePath,String localPath, String filename) throws Exception {
		try {
			if (connectServer(getIp(), getPort(), getUser(), getPwd())) {
				if (remotePath.length() != 0)
					ftpClient.cd(remotePath);
				ftpClient.binary();
				TelnetOutputStream os = ftpClient.put(filename);
				File file_in = new File(localPath + File.separator + filename);
				FileInputStream is = new FileInputStream(file_in);
				byte[] bytes = new byte[1024];
				int c;
				while ((c = is.read(bytes)) != -1) {
					os.write(bytes, 0, c);
				}
				is.close();
				os.close();
				ftpClient.closeServer();
			}
		} catch (Exception ex) {
			throw new Exception("ftp upload file error:" + ex.getMessage());
		}
	}

	/**
	 * @return
	 */
	public String getIp() {
		return ip;
	}

	/**
	 * @return
	 */
	public int getPort() {
		return port;
	}

	/**
	 * @return
	 */
	public String getPwd() {
		return pwd;
	}

	/**
	 * @return
	 */
	public String getUser() {
		return user;
	}

	/**
	 * @param string
	 */
	public void setIp(String string) {
		ip = string;
	}

	/**
	 * @param i
	 */
	public void setPort(int i) {
		port = i;
	}

	/**
	 * @param string
	 */
	public void setPwd(String string) {
		pwd = string;
	}

	/**
	 * @param string
	 */
	public void setUser(String string) {
		user = string;
	}

	/**
	 * @return
	 */
	public FtpClient getFtpClient() {
		return ftpClient;
	}

	/**
	 * @param client
	 */
	public void setFtpClient(FtpClient client) {
		ftpClient = client;
	}

	/**
	 * @return
	 */
	public String getRemotePath() {
		return remotePath;
	}

	/**
	 * @param string
	 */
	public void setRemotePath(String string) {
		remotePath = string;
	}

	/**
	 * @return
	 */
	public String getLocalPath() {
		return localPath;
	}

	/**
	 * @param string
	 */
	public void setLocalPath(String string) {
		localPath = string;
	}

}


Junit测试类
package com.northking.dataManager.dataimport.parse.test;

import com.northking.dataManager.util.FtpTool;

import junit.framework.TestCase;

/**
 * @author maochangming
 * @date 2008-6-20  13:09:11
 * @description:
 */
public class FtpToolTest extends TestCase {
	FtpTool ftpTool;

	/**
	 * Constructor for FtpToolTest.
	 * @param arg0
	 */
	public FtpToolTest(String arg0) {
		super(arg0);
	}

	public static void main(String[] args) {
		junit.textui.TestRunner.run(FtpToolTest.class);
	}
	
	public void testDownLoadFile()throws Exception{
		ftpTool.downloadFile(ftpTool.getRemotePath(),"c:/downloads","JBFImgMng.CAB");
	}

	/*
	 * @see TestCase#setUp()
	 */
	protected void setUp() throws Exception {
		ftpTool = new FtpTool();
		ftpTool.setIp("10.164.12.70");
		ftpTool.setPort(2100);
		ftpTool.setUser("share");
		ftpTool.setPwd("share");
		ftpTool.setRemotePath("/paeams");
		super.setUp();
	}

	/*
	 * @see TestCase#tearDown()
	 */
	protected void tearDown() throws Exception {
		super.tearDown();
	}

}
   发表时间:2008-09-03  
sun.net.ftp.*;
请问LZ,可否直接在客户端操作,将服务端的文件从目录A移动到目录B?
0 请登录后投票
   发表时间:2008-09-04  
这倒没有实验过,不过应该是可以的;
你用ftp客户端软件将一个文件从一个目录转移到另外一个目录中时看一下ftp日志,它使用的是什么命令,探索一下,呵呵
0 请登录后投票
   发表时间:2008-11-20  
用FtpClient的rename方法可以将服务端的文件从目录A移动到目录B

太忙了,一直没时间整理,有空了把代码贴上来
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics