`
panshaobinSB
  • 浏览: 198724 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

ftp下载与上传

 
阅读更多
package cn.eshore.bnet.baobiaotask.service;

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.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;

import cn.eshore.bnet.baobiaotask.entity.BaoBiaoProperties;

/**
 * FTP TOOLS (must import commons-net-1.4.1.jar or newer jar) <dependency>
 * <groupId>commons-net</groupId> <artifactId>commons-net</artifactId>
 * <version>1.4.1</version> </dependency>
 * 
 * @author wuxi
 * 
 */
public class FtpUtil {
	private static final Log log = LogFactory.getLog(FtpUtil.class);
	// FTP server parameter
	public static String IP;
	public static String ACCOUNT;
	public static String PASSWORD;
	public static String REMOTE_LOG_DIR;
	public static final int BUFFER_SIZE = 2048;

	// constant parameter,do not change them.
	public static final int ASCII_FILE_TYPE = 0;
	public static final int BINARY_FILE_TYPE = 2;
	public static final String GBK_ENCODING = "GBK";
	public static final String UTF8_ENCODING = "UTF-8";

	static {
		IP = "192.18.96.73";
		ACCOUNT = "";
		PASSWORD = "";
		REMOTE_LOG_DIR = "/panshao";
			}

	/**
	 * FTP upload single file
	 */
	public static int uploadFile(File file, String fileName) {
		return uploadFile(IP, ACCOUNT, PASSWORD, file, REMOTE_LOG_DIR,
				GBK_ENCODING, BINARY_FILE_TYPE, fileName);
	}

	public static int uploadFile(String ip, String account, String password,
			File file, String remoteDir, String encoding, int fileType,
			String fileName) {
		FTPClient ftpClient = new FTPClient();
		FileInputStream fis = null;

		try {
			ftpClient.connect(ip);
			ftpClient.login(account, password);

			fis = new FileInputStream(file);
			ftpClient.changeWorkingDirectory(remoteDir);
			ftpClient.setBufferSize(BUFFER_SIZE);
			ftpClient.setControlEncoding(encoding);
			ftpClient.setFileType(fileType);
			ftpClient.storeFile(fileName, fis);
			log.info("Upload " + fileName + " to " + IP + "/" + remoteDir);
			return 0;
		} catch (IOException e) {
			e.printStackTrace();
			throw new RuntimeException("FTP client make a mistake!", e);
		} finally {
			if (fis != null) {
				try {
					fis.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			try {
				ftpClient.disconnect();
			} catch (IOException e) {
				e.printStackTrace();
				throw new RuntimeException("Close FTP connection error!", e);
			}
		}
	}

	/**
	 * FTP download single file
	 */
	public static int downloadFile(String fileName, File localFile) {
		return downloadFile(IP, ACCOUNT, PASSWORD, REMOTE_LOG_DIR, fileName,
				GBK_ENCODING, BINARY_FILE_TYPE, localFile);
	}

	public static int downloadFile(String ip, String account, String password,
			String remoteDir, String fileName, String encoding, int fileType,
			File localFile) {
		FTPClient ftpClient = new FTPClient();
		FileOutputStream fos = null;

		try {
			ftpClient.connect(ip);
			ftpClient.login(account, password);

			if (!remoteDir.endsWith("/")) {
				remoteDir += "/";
			}
			String remoteFileName = remoteDir + fileName;
			fos = new FileOutputStream(localFile);

			ftpClient.setBufferSize(BUFFER_SIZE);
			ftpClient.setFileType(fileType);
			ftpClient.retrieveFile(remoteFileName, fos);
			log.info("Download " + fileName + " to "
					+ localFile.getParentFile().getPath());
			return 0;
		} catch (IOException e) {
			e.printStackTrace();
			throw new RuntimeException("FTP client make a mistake!", e);
		} finally {
			if (fos != null) {
				try {
					fos.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			try {
				ftpClient.disconnect();
			} catch (IOException e) {
				e.printStackTrace();
				throw new RuntimeException("Close FTP connection error!", e);
			}
		}
	}

	public static List<String> listFiles(String remoteDir) {
		FTPClient ftpClient = new FTPClient();
		List<String> nameList = new ArrayList<String>();
		try {
			ftpClient.connect(IP);
			ftpClient.login(ACCOUNT, PASSWORD);
			FTPFile[] files = ftpClient.listFiles(remoteDir);
			for (int i = 0; i < files.length; i++) {
				if (files[i].isFile()) {
					nameList.add(files[i].getName());
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return nameList;
	}

	public static void main(String[] args) {
		// 放在本地的文件名
File localFile = new File("F:\\数据入库\\测试\\a.TXT");
		  int i = downloadFile("xx.TXT", localFile);
		  System.out.println(i);
		 			}
}


上面的例子是完全可用的,下面会附上所需要的jar包,其中main方法中实现的效果就是:
把指定服务器文件夹下面的xx.TXT文档下载到本地的F:\\数据入库\\测试\\a.TXT
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics