java通过ftp上传、下载文件,遍历文件目录

import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.apache.catalina.tribes.util.Logs;

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

public class DownFileForFtp {
	FtpClient ftpClient;
	private String server = "ip";
	private int port = 21;
	private String userName = "usn";
	private String userPassword = "pwd";

	/**
	 * 链接到服务器
	 * 
	 * @return
	 */
	public boolean open() {
		if (ftpClient != null && ftpClient.serverIsOpen())
			return true;
		try {
			ftpClient = new FtpClient();
			ftpClient.openServer(server, port);
			ftpClient.login(userName, userPassword);
			ftpClient.binary();
			return true;
		} catch (Exception e) {
			e.printStackTrace();
			ftpClient = null;
			return false;
		}
	}

	public boolean cd(String dir) {
		boolean f = false;
		try {
			ftpClient.cd(dir);
		} catch (IOException e) {
			//Logs.error(e.toString());
			return f;
		}
		return true;
	}

	/**
	 * 上传文件到FTP服务器
	 * 
	 * @param localPathAndFileName
	 *            本地文件目录和文件名
	 * @param ftpFileName
	 *            上传后的文件名
	 * @param ftpDirectory
	 *            FTP目录如:/path1/pathb2/,如果目录不存在回自动创建目录
	 * @throws Exception
	 */
	public boolean upload(String localDirectoryAndFileName, String ftpFileName,
			String ftpDirectory) throws Exception {
		if (!open())
			return false;
		FileInputStream is = null;
		TelnetOutputStream os = null;
		try {
			char ch = ' ';
			if (ftpDirectory.length() > 0)
				ch = ftpDirectory.charAt(ftpDirectory.length() - 1);
			for (; ch == '/' || ch == '\\'; ch = ftpDirectory
					.charAt(ftpDirectory.length() - 1))
				ftpDirectory = ftpDirectory.substring(0,
						ftpDirectory.length() - 1);

			int slashIndex = ftpDirectory.indexOf(47);
			int backslashIndex = ftpDirectory.indexOf(92);
			int index = slashIndex;
			String dirall = ftpDirectory;
			if (backslashIndex != -1 && (index == -1 || index > backslashIndex))
				index = backslashIndex;
			String directory = "";
			while (index != -1) {
				if (index > 0) {
					String dir = dirall.substring(0, index);
					directory = directory + "/" + dir;
					ftpClient.sendServer("XMKD " + directory + "\r\n");
					ftpClient.readServerResponse();
				}
				dirall = dirall.substring(index + 1);
				slashIndex = dirall.indexOf(47);
				backslashIndex = dirall.indexOf(92);
				index = slashIndex;
				if (backslashIndex != -1
						&& (index == -1 || index > backslashIndex))
					index = backslashIndex;
			}
			ftpClient.sendServer("XMKD " + ftpDirectory + "\r\n");
			ftpClient.readServerResponse();

			os = ftpClient.put(ftpDirectory + "/" + ftpFileName);
			File file_in = new File(localDirectoryAndFileName);
			is = new FileInputStream(file_in);
			byte bytes[] = new byte[1024];
			int i;
			while ((i = is.read(bytes)) != -1)
				os.write(bytes, 0, i);
			// 清理垃圾

			return true;
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		} finally {
			if (is != null)
				is.close();
			if (os != null)
				os.close();
		}
	}

	/**
	 * 从FTP服务器上下载文件并返回下载文件长度
	 * 
	 * @param ftpDirectoryAndFileName
	 * @param localDirectoryAndFileName
	 * @return
	 * @throws Exception
	 */
	public long download(String ftpDirectoryAndFileName,
			String localDirectoryAndFileName) throws Exception {
		long result = 0;
		if (!open())
			return result;
		TelnetInputStream is = null;
		FileOutputStream os = null;
		try {
			is = ftpClient.get(ftpDirectoryAndFileName);
			java.io.File outfile = new java.io.File(localDirectoryAndFileName);
			os = new FileOutputStream(outfile);
			byte[] bytes = new byte[1024];
			int c;
			while ((c = is.read(bytes)) != -1) {
				os.write(bytes, 0, c);
				result = result + c;
			}
		} catch (Exception e) {
			throw e;
		} finally {
			if (is != null)
				is.close();
			if (os != null)
				os.close();

		}
		return result;
	}

	/**
	 * 返回FTP目录下的文件列表
	 * 
	 * @param ftpDirectory
	 * @return
	 */
	public List<String> getFileNameList(String ftpDirectory) {
		List<String> list = new ArrayList<String>();
		if (!open())
			return list;
		try {
			DataInputStream dis = new DataInputStream(
					ftpClient.nameList(ftpDirectory));
			String filename = "";
			while ((filename = dis.readLine()) != null) {
				list.add(filename);
				System.out.println(filename);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return list;
	}

	/**
	 * 删除FTP上的文件
	 * 
	 * @param ftpDirAndFileName
	 */
	public boolean deleteFile(String ftpDirAndFileName) {
		if (!open())
			return false;
		ftpClient.sendServer("DELE " + ftpDirAndFileName + "\r\n");
		return true;
	}

	/**
	 * 删除FTP目录
	 * 
	 * @param ftpDirectory
	 */
	public boolean deleteDirectory(String ftpDirectory) {
		if (!open())
			return false;
		ftpClient.sendServer("XRMD " + ftpDirectory + "\r\n");
		return true;
	}

	/**
	 * 关闭链接
	 */
	public void close() {
		try {
			if (ftpClient != null && ftpClient.serverIsOpen())
				ftpClient.closeServer();
		} catch (Exception e) {

		}
	}
	
	public static void main(String []args) throws Exception{
		DownFileForFtp df = new DownFileForFtp();
		df.getFileNameList("E:\\uploadfiles\\cat");
		df.download("E:\\uploadfiles\\cat\\2012-03-29.11.00.00.012.xml", "F:\\temp\\ftpdown\\2012-03-29.11.00.00.012.xml");

	}
	
}

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值