利用commons-net.jar下载ftp文件到本地或hdfs

 public class SimpleFTPClient {       
        private FTPClient ftpClient = new FTPClient();
	private Logger logger = Logger.getLogger(SimpleFTPClient.class);
	private Properties prop = new Properties();

	public SimpleFTPClient() {
		// 设置将过程中使用到的命令输出到控制台
		try {
			logger.info("new SimpleFTPClient check log in logs/ftp.log");
			String path = new File(".").getAbsolutePath();
			path = path.substring(0, path.length() - 1) + "logs/ftp.log";
			OutputStream os = new FileOutputStream(path, true);
			ftpClient.addProtocolCommandListener(new PrintCommandListener(new PrintWriter(os)));
			prop.load(SimpleFTPClient.class.getResourceAsStream("ftp.properties"));
			System.out.println(prop);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	public boolean connect() throws IOException {
		ftpClient.connect(prop.getProperty("hostname"), Integer.valueOf(prop.getProperty("port")));
		if (FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) {
			if (ftpClient.login(prop.getProperty("username"), prop.getProperty("password"))) {
				ftpClient.enterLocalPassiveMode();
				ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
				return true;
			}
		}
		disconnect();
		return false;
	}
	public boolean downloadToLocal(String ftpFileName, String localFileName) throws IOException {
		boolean ret = false;
		File localFile = new File(localFileName);
		FTPFile ftpFile = ftpClient.listFiles(ftpFileName)[0];
		long ftpFileSize = ftpFile.getSize();
		long localFileSize = 0;
		if (!localFile.exists() || (localFileSize = localFile.length()) == 0) {
			logger.info("start new downloading:" + ftpFileName);
			OutputStream os = new FileOutputStream(localFile);
			ret = ftpClient.retrieveFile(ftpFileName, os);
			os.close();
		} else if (localFileSize >= ftpFileSize) {
			logger.info("already exist:" + ftpFileName);
			ret = true;
		} else {
			logger.info("continue downloading:" + ftpFileName + ",position:" + localFileSize);
			OutputStream os = new FileOutputStream(localFile, true);
			ftpClient.setRestartOffset(localFileSize);
			ret = ftpClient.retrieveFile(ftpFileName, os);
			os.close();
		}
		logger.info("download finishd:" + ftpFileName);
		return ret;

	}
	public boolean downloadToHdfs(String ftpFileName, String hdfsFileName, FileSystem fs) throws IOException {

		boolean ret = false;
		//		Configuration conf = new Configuration();
		//		FileSystem fs = FileSystem.get(conf);
		Path hdfsPath = new Path(hdfsFileName);
		FTPFile ftpFile = ftpClient.listFiles(ftpFileName)[0];
		long ftpFileSize = ftpFile.getSize();
		long hdfsFileSize = 0;

		if (!fs.exists(hdfsPath) || (hdfsFileSize = fs.getFileStatus(hdfsPath).getLen()) == 0) {
			logger.info("start new downloading:" + ftpFileName);
			FSDataOutputStream fsdos = fs.create(hdfsPath);
			ret = ftpClient.retrieveFile(ftpFileName, fsdos);
			fsdos.close();
		} else if (hdfsFileSize >= ftpFileSize) {
			logger.info("already exist:" + ftpFileName);
			ret = true;
		} else {
			logger.info("continue downloading:" + ftpFileName + ",position:" + hdfsFileSize);
			FSDataOutputStream fsdos = fs.append(hdfsPath);
			ftpClient.setRestartOffset(hdfsFileSize);
			ret = ftpClient.retrieveFile(ftpFileName, fsdos);
			fsdos.close();
		}
		logger.info("download finishd:" + ftpFileName);
		return ret;

	}
	public void disconnect() throws IOException {
		try {
			ftpClient.logout();
		} catch (IOException e) {
			throw e;
		} finally {
			if (ftpClient.isConnected()) {
				ftpClient.disconnect();
			}
		}
	}
}


转载于:https://my.oschina.net/zstorm/blog/405432

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值