`

Jdk1.7自带的FTP文件上传下载

阅读更多
Ftp相关的类库很多,这里以JDK自带的FTP上传下载功能为例。
package com.boonya.upload.util.simple;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.InetSocketAddress;
import sun.net.TelnetInputStream;
import sun.net.TelnetOutputStream;
import sun.net.ftp.FtpClient;
import sun.net.ftp.FtpProtocolException;
/**
 * Java自带的API对FTP的操作
 * @Jdk:version 1.7
 * @Title:Ftp.java
 * @author: boonya
 * @notice: 貌似此方法有个缺陷,不能操作大文件
 */
public class FtpJdk
{
	/**
	 * 
	 * 本地文件名
	 */
	private String localfilename;
	/**
	 * 
	 * 远程文件名
	 */
	private String remotefilename;
	/**
	 * 
	 * FTP客户端
	 */
	private FtpClient ftpClient;

	/**
	 * 服务器连接
	 * 
	 * @param ip
	 *            服务器IP
	 * @param port
	 *            服务器端口
	 * @param user
	 *            用户名
	 * @param password
	 *            密码
	 * @param path
	 *            服务器路径
	 * @throws FtpProtocolException
	 * 
	 */
	public void connectServer(String ip, int port, String user, String password, String path) throws FtpProtocolException
	{
		try
		{
			/* ******连接服务器的两种方法****** */
			// 第一种方法
			/*
			 * ftpClient =FtpClient.create();
			 * ftpClient.connect(new InetSocketAddress(ip, port));
			 */
			// 第二种方法
			ftpClient = FtpClient.create(ip);
			ftpClient.login(user, null, password);
			// 设置成2进制传输
			ftpClient.setBinaryType();
			System.out.println("login success!");

			if (path.length() != 0)
			{
				// 把远程系统上的目录切换到参数path所指定的目录
				ftpClient.changeDirectory(path);
			}
			ftpClient.setBinaryType();
		} catch (IOException ex)
		{
			ex.printStackTrace();
			throw new RuntimeException(ex);
		}

	}

	/**
	 * 关闭连接
	 * 
	 */

	public void closeConnect()
	{
		try
		{
			ftpClient.close();
			System.out.println("disconnect success");
		} catch (IOException ex)
		{
			System.out.println("not disconnect");
			ex.printStackTrace();
			throw new RuntimeException(ex);
		}
	}

	/**
	 * 
	 * 上传文件
	 * 
	 * @param localFile
	 *            本地文件
	 * @param remoteFile
	 *            远程文件
	 * @throws FtpProtocolException
	 */
	public void upload(String localFile, String remoteFile) throws FtpProtocolException
	{
		this.localfilename = localFile;
		this.remotefilename = remoteFile;
		TelnetOutputStream os = null;
		FileInputStream is = null;
		try
		{
			// 将远程文件加入输出流中
			os = (TelnetOutputStream) ftpClient.putFileStream(this.remotefilename, true);

			// 获取本地文件的输入流
			File file_in = new File(this.localfilename);
			is = new FileInputStream(file_in);

			// 创建一个缓冲区
			byte[] bytes = new byte[1024];
			int c;
			while ((c = is.read(bytes)) != -1)
			{
				os.write(bytes, 0, c);
			}
			System.out.println("upload success");
		} catch (IOException ex)
		{
			System.out.println("not upload");
			ex.printStackTrace();
			throw new RuntimeException(ex);
		} finally
		{
			try
			{
				if (is != null)
				{
					is.close();
				}
			} catch (IOException e)
			{
				e.printStackTrace();
			} finally
			{
				try
				{
					if (os != null)
					{
						os.close();
					}
				} catch (IOException e)
				{
					e.printStackTrace();
				}
			}
		}
	}

	/**
	 * 
	 * 下载文件
	 * 
	 * @param remoteFile
	 *            远程文件路径(服务器端)
	 * @param localFile
	 *            本地文件路径(客户端)
	 * @throws FtpProtocolException
	 * 
	 */
	public void download(String remoteFile, String localFile) throws FtpProtocolException
	{
		TelnetInputStream is = null;
		FileOutputStream os = null;
		try
		{

			// 获取远程机器上的文件filename,借助TelnetInputStream把该文件传送到本地。
			is = (TelnetInputStream) ftpClient.getFileStream(remoteFile);
			File file_in = new File(localFile);
			os = new FileOutputStream(file_in);

			byte[] bytes = new byte[1024];
			int c;
			while ((c = is.read(bytes)) != -1)
			{
				os.write(bytes, 0, c);
			}
			System.out.println("download success");
		} catch (IOException ex)
		{
			System.out.println("not download");
			ex.printStackTrace();
			throw new RuntimeException(ex);
		} finally
		{
			try
			{
				if (is != null)
				{
					is.close();
				}
			} catch (IOException e)
			{
				e.printStackTrace();
			} finally
			{
				try
				{
					if (os != null)
					{
						os.close();
					}
				} catch (IOException e)
				{
					e.printStackTrace();
				}
			}
		}
	}

	/**
	 * 函数入口
	 * 
	 * @param agrs
	 */
	public static void main(String agrs[])
	{

		String filepath[] =
		{ "/temp/aa.txt", "/temp/regist.log" };
		String localfilepath[] =
		{ "C:\\tmp\\1.txt", "C:\\tmp\\2.log" };
		FtpJdk ftp = new FtpJdk();
		/*
		 * 使用默认的端口号、用户名、密码以及根目录连接FTP服务器
		 */
		try
		{
			ftp.connectServer("127.0.0.1", 22, "boonya", "user@", "/temp");
		} catch (FtpProtocolException e)
		{
			e.printStackTrace();
		}
		// 下载
		for (int i = 0; i < filepath.length; i++)
		{
			try
			{
				ftp.download(filepath[i], localfilepath[i]);
			} catch (FtpProtocolException e)
			{
				e.printStackTrace();
			}
		}
		String localfile = "E:\\contact.txt";
		String remotefile = "/temp/records.txt";
		// 上传
		try
		{
			ftp.upload(localfile, remotefile);
		} catch (FtpProtocolException e)
		{
			e.printStackTrace();
		}
		ftp.closeConnect();
	}

}


参考自:http://www.open-open.com/lib/view/open1342167969281.html
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics