FTP分页读取文件

该代码段展示了一个Java类,用于处理FTP服务器上的文件。类通过SpringUtil从ftp.properties配置文件获取FTP服务器的连接信息,然后连接并登录FTP服务器。类实现了分页读取指定路径下的文件,对每个文件进行重命名,并解析文件名中的信息。如果文件名符合特定格式(以'IN'开头),则将信息存入MchntPrvsns对象,并调用MchntPrvsnsService进行业务处理。在处理过程中,服务会更新或插入数据库记录。如果文件重命名失败,日志将记录错误信息并跳过后续处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.ums.bke.param.mchntorvsns.acc;

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.ResourceBundle;

import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPListParseEngine;
import org.apache.commons.net.ftp.FTPReply;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;

import com.huateng.common.util.SpringUtil;
import com.ums.bke.param.mchntorvsns.model.MchntPrvsns;
import com.ums.bke.param.mchntorvsns.service.MchntPrvsnsService;

/**
 * desc:商户备付金,累计控制类
 * 
 *
 * @version SVN $Revision: 1.1 $ $Date: Aug 16, 2013  2:05:02 PM $
 */
public class MchntPrvsnsAcc{

	Logger log = Logger.getLogger(MchntPrvsnsAcc.class);
	@Autowired
	private static MchntPrvsnsService service;
	static{
		service = SpringUtil.getBean("mchntPrvsnsService");
	}
	String host,username,password,path;
	int port;
	/**
	 * 取得路径
	 * @return
	 */
	public void getConfigRemote(){
		ResourceBundle bundle = ResourceBundle.getBundle("ftp");//src下的ftp.properties
		host = bundle.getString("mchnt.prvsns.host");
		port = Integer.parseInt(bundle.getString("mchnt.prvsns.port"));
		username = bundle.getString("mchnt.prvsns.username");
		password = bundle.getString("mchnt.prvsns.password");
		path = bundle.getString("mchnt.prvsns.dir");
	}
	
	/**
	 * 取得远程文件名(所携带的信息)
	 */
	public void readFile2Acc() throws Exception{
		this.getConfigRemote();
		try {
			//连接FTP
			FTPClient ftpClient = new FTPClient();
			ftpClient.connect(host, port);
			ftpClient.setControlEncoding("GBK");
			if (FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) {
				if (!ftpClient.login(username, password)) {
					throw new Exception("FTP不能连接主机:" + host);
				}
			}
			
			//分页读取文件
			FTPListParseEngine engine = ftpClient.initiateListParsing(path);			
			while(engine.hasNext()){
				FTPFile[] ftpFiles = engine.getNext(100);				
				if(ftpFiles != null && ftpFiles.length > 0){
					MchntPrvsns prvsns = new MchntPrvsns();
					for(FTPFile file : ftpFiles){
						//携带的信息:文件名为INX商户号X帐号X流水号X入账金额 [0:IN,1:商户号,2:账号,3:流水号,4:金额]
						String info = file.getName();
						//System.out.println("==================>>" + info);
						if(info != null && info.startsWith("IN")){
							//取到的文件修改名称
							//boolean renameRt = ftpClient.rename(path + File.separator +info, path + File.separator + "OK_" + info);
							boolean renameRt = ftpClient.rename(path + "/" +info, path + "/" + "OK_" + info);
							if(renameRt){
								String[] msgs = info.split("X");
								if(msgs != null && msgs.length == 5){
									/*
									prvsns.setMchntId(msgs[1]);
									//根据商户号查询本记录
									prvsns = service.findByMchntId(prvsns);
									if(prvsns != null){
										//更新账号
										prvsns.setAccoutNo(msgs[2]);
										service.updateAccountNo(prvsns);
										//流水号不一致
										if(!msgs[3].equals(prvsns.getLastBatchNo())){
											prvsns.setAccoutAmt(msgs[4]);
											service.update(prvsns);
										}
									}else{
										//新增
										prvsns = new MchntPrvsns();
										prvsns.setMchntId(msgs[1]);
										prvsns.setAccoutNo(msgs[2]);
										prvsns.setLastBatchNo(msgs[3]);
										prvsns.setAccoutAmt(msgs[4]);
										
										Date d = new Date(System.currentTimeMillis());
										SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
										String ds = sdf.format(d);
										prvsns.setPayItem("定时任务");
										prvsns.setUseType("02");
										prvsns.setAreaCode("0000");
										prvsns.setAddAreaCode("0000");
										prvsns.setPayFlag("2");
										
										prvsns.setValideDate("000");
										prvsns.setMaxCtlAmt("0");
										prvsns.setMinCtlAmt("0");
										prvsns.setSumPayAmt("0");
										prvsns.setFreezeAmt("0");
										//日期范围
										String startWith = ds.substring(0, 8);
										String endWith = (Integer.parseInt(ds.substring(0, 4)) + 3) + ds.substring(4, 8);
										prvsns.setDateRange(startWith + "-" + endWith);
										service.insert(prvsns);
									}*/
									//注入service,出现异常回滚
									service.doExecute(msgs, prvsns);
								}
							}else{
								log.error("【商户备付金定时任务】文件:" + info + "重命名失败,将不进行累计操作!");
							}
						}
					}
				}
			}
			
			if (ftpClient.isConnected()) {
				ftpClient.disconnect();
			}
		} catch (Exception e) {
			e.printStackTrace();
			log.equals(e);
			throw e;
		}
		
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值