一 SFTP下载,读取linux服务器文件

1 导入依赖

        <dependency><groupId>org.apache.camel</groupId><artifactId>camel-ftp</artifactId><version>2.13.2</version></dependency><dependency><groupId>net.sourceforge.javacsv</groupId><artifactId>javacsv</artifactId><version>2.0</version></dependency>

2 LakLaBillDownload.java

/** Copyright 2019 Wicrenet, Inc. All rights reserved.*/
package com.xy.pay.core.joint.lakla.trade.bill;/*** 【拉卡拉账单拉取】** @author YJX* Created on 2019-06-26 18:32*/import com.jcraft.jsch.*;
import org.apache.commons.io.FileUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.io.Resource;
import org.springframework.stereotype.Component;import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.util.Properties;@Component
class LakLaBillDownload {private static final Logger logger       = LoggerFactory.getLogger(LakLaBillDownload.class);private static final String SFTPPATH     = "/sftp/bill/fzxya/"; // SFTP 拉卡拉服务器账单绝对路径private static final String SFTPUSERNAME = "xxxxx";             // SFTP 拉卡拉用户名private static final String SFTPHOST     = "xxx.xxx.xxx";      // SFTP 拉卡拉账单服务器IP地址private static final int    SFTPPORT     = 22;                  // SFTP 端口private static final String SFTPPASSWORD = "xxxxx";             // SFTP 拉卡拉密码/*** 拉卡拉账单拉取** @param sfileName 拉卡拉服务器账单名称* @param billFile  自己公司服务器存拉卡拉账单路径**/static File downloadLaKLaBill(String sfileName, Resource billFile) {try {//远程主机绝对路径+文件名称  格式:  /sftp/bill/fzxya/TF_机构号_YYYYMMDD.txtString sftpBillResources = SFTPPATH + sfileName;Session session;Channel channel;JSch jsch = new JSch();session = jsch.getSession(SFTPUSERNAME, SFTPHOST, SFTPPORT);session.setPassword(SFTPPASSWORD);session.setTimeout(100000);Properties config = new Properties();config.put("StrictHostKeyChecking", "no");session.setConfig(config);if (!session.isConnected()) {session.connect();}channel = session.openChannel("sftp");if (!channel.isConnected()) {channel.connect();}ChannelSftp chSftp = (ChannelSftp) channel;try {// 将服务器指定文件转成流InputStream inputStream = chSftp.get(sftpBillResources);// 将流转成文件黏贴到billFile.getFile(保存到自己的服务器)FileUtils.copyToFile(inputStream, billFile.getFile());//返回文件流return billFile.getFile();} catch (SftpException fe) {if (fe.toString().contains("No such file")) {logger.error("拉卡拉账单拉取,拉卡拉服务器不存在该文件:{}", fe);return null;}logger.error("卡拉账单拉取,错误:{}", fe);} catch (UnsupportedEncodingException ue) {logger.error("拉卡拉账单拉取,不支持的编码错误:{}", ue);} catch (IOException ie) {logger.error("拉卡拉账单拉取,IO错误:{}", ie);} finally {//关闭持久连接chSftp.quit();channel.disconnect();session.disconnect();}return null;} catch (JSchException jsche) {logger.error("拉卡拉账单拉取,连接拉卡拉服务器错误:{}", jsche);}return null;}}

3 LaklaTradeBillService.java

package com.xy.pay.core.joint.lakla.trade.bill;import com.xy.common.msg.Message;
import com.xy.common.msg.Msg;
import com.xy.common.verify.Asserts;
import com.xy.pay.core.PayEnvironment;
import com.xy.pay.core.exception.XyPayException;
import com.xy.pay.core.joint.JointTradeBillService;
import com.xy.pay.core.joint.lakla.LaklaTradeService;
import com.xy.pay.core.joint.lakla.model.LaklaTradeBill;
import com.xy.pay.core.joint.lakla.model.LaklaTradeBillResponse;
import com.xy.pay.core.structure.plugin.LakLaBillParseStrategy;
import org.joda.time.LocalDate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.core.io.Resource;
import org.springframework.stereotype.Service;import java.io.File;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;/*** 拉卡拉账单下载** @author YJX* @date 2019/5/14 15:10*/
@Service
@Qualifier("lakla")
public class LaklaTradeBillService extends LaklaTradeService implements JointTradeBillService<LaklaTradeBill, LaklaTradeBillResponse> {private static final Logger                 logger = LoggerFactory.getLogger(LaklaTradeBillService.class);@Autowiredprivate              PayEnvironment         payEnvironment;private static final Lock                   LOCK   = new ReentrantLock();@Autowired(required = false)private              LakLaBillParseStrategy lakLaBillParseStrategy;/*** 账单下载*/@Overridepublic Msg<LaklaTradeBillResponse> download(LaklaTradeBill tradeBill) {Asserts.notNull(tradeBill);Asserts.notNull(tradeBill.getBill_date());// 对账单文件格式:TF_机构号_YYYYMMDD.txt(YYYYMMDD为产生对账单的文件)String fileName = "TF_829203_" + LocalDate.parse(tradeBill.getBill_date().toString()).toString("yyyyMMdd") + ".txt";//没有配置下载路径,就不下载if (this.payEnvironment.getLaklaBillDownloadPath() == null) {throw new XyPayException("没有配置拉卡拉账单下载路径");}try {String dirName = LocalDate.parse(tradeBill.getBill_date().toString()).toString("yyyy-MM-dd");//创建目录createDir(dirName);//删除历史removeHistoryBill(fileName, dirName);//生成路径Resource billFile = this.payEnvironment.getLaklaBillDownloadPath().createRelative(dirName + "/" + fileName);File file = LakLaBillDownload.downloadLaKLaBill(fileName, billFile);//请求账单生成return this.lakLaBillParseStrategy.parse(file, tradeBill.getAppInfo().getAccount());} catch (IOException e) {logger.error("拉卡拉账单下载错误:{}", e);}return Message.getError("账单获取错误");}/*** 创建目录,如果目录不存在*/private void createDir(String dirName) throws IOException {Resource dirFile = this.payEnvironment.getLaklaBillDownloadPath().createRelative(dirName);if (dirFile.exists() && dirFile.getFile().isDirectory()) {return;}try {Asserts.state(LOCK.tryLock(10, TimeUnit.SECONDS));} catch (Exception e) {logger.error(" 创建目录,如果目录不存在 - 获取锁失败", e);}try {if (dirFile.exists() && dirFile.getFile().isDirectory()) {return;}boolean flag = dirFile.getFile().mkdirs();if (!flag) {throw new IOException("拉卡拉账单-目录创建失败");}} finally {LOCK.unlock();}}/*** 移除存在的账单** @param fileName*/private void removeHistoryBill(String fileName, String dirName) throws IOException {if (!this.payEnvironment.getLaklaBillDownloadPath().exists()) {try {try {Asserts.state(LOCK.tryLock(10, TimeUnit.SECONDS));} catch (Exception e) {logger.error("移除存在的账单 - 获取锁失败", e);}if (!this.payEnvironment.getLaklaBillDownloadPath().exists()) {   //双重验证boolean flag = this.payEnvironment.getLaklaBillDownloadPath().getFile().mkdirs();if (!flag) {throw new IOException("拉卡拉账单-创建目录失败");}}} finally {LOCK.unlock();}}Resource oldFile = this.payEnvironment.getLaklaBillDownloadPath().createRelative(dirName + "/" + fileName);if (oldFile.exists()) {boolean flag = oldFile.getFile().delete();if (!flag) {logger.error("拉卡拉账单-历史账单删除失败");}}}}

java SFTP下载,读取linux服务器文件相关推荐

  1. java利用shh2 读取远程服务器文件/删除服务器文件

    maven引入 <!-- 读取远程服务器文件--><!-- shh2 --><dependency><groupId>ch.ethz.ganymed&l ...

  2. 脚本SFTP定时取Linux服务器文件

    为什么80%的码农都做不了架构师?>>>    在工作中尤其是政府机关为了安全方面考虑,通常是不开通服务器与服务器之间FTP服务 如果每天又要巡检服务器,每次都要登录查看某个文件给自 ...

  3. 使用FileZilla上传和下载远程Linux服务器文件

    1.首先去官网下载对应的windows版本https://www.filezilla.cn/ 2.打开之后添加站点 这里选SFTP协议 之后会弹窗问你是否需要信任当前主机,信任一次还是保存并信任,一般 ...

  4. javaftp读取服务器文件,java读取ftp服务器文件

    java读取ftp服务器文件 内容精选 换一换 文件系统创建完成后,用户需在客户端挂载文件共享,在本地共享目录和CSG的文件共享建立映射,通过操作本地的目录实现对CSG共享目录的操作,实现数据实时上云 ...

  5. ftp读取服务器文件是否存在,java读取ftp服务器文件是否存在

    java读取ftp服务器文件是否存在 内容精选 换一换 弹性云服务器通过SNAT访问公网上服务器,出现TCP建链失败的情况,可通过以下方法进行排查.执行以下命令,查看远端服务器是否开启了"t ...

  6. 直接读取ftp服务器文件,java读取ftp服务器文件

    java读取ftp服务器文件 [2021-02-05 07:08:30]  简介: php去除nbsp的方法:首先创建一个PHP代码示例文件:然后通过"preg_replace(" ...

  7. python连接linux服务器读取txt文件_python 读取Linux服务器上的文件方法

    使用Python语句,读取Linux远端服务器上的文件打印到控制台的代码实现: 下载包:paramiko import paramiko #服务器信息,主机名(IP地址).端口号.用户名及密码 hos ...

  8. java读取文件服务器文件,java读取远程服务器文件

    java读取远程服务器文件 内容精选 换一换 已成功登录Java性能分析.待安装Guardian的服务器已开启sshd.待安装Guardian的服务器已安装JRE,JRE版本要求为Huawei JDK ...

  9. java读远程服务器文件,java 读取远程服务器文件

    java 读取远程服务器文件 [2021-01-31 12:09:45]  简介: php去除nbsp的方法:首先创建一个PHP代码示例文件:然后通过"preg_replace(" ...

最新文章

  1. 沾包 nagle算法等
  2. 文档知多少---走出软件作坊:三五个人十来条枪 如何成为开发正规军(二十五)[转]...
  3. 微信公众平台自定义菜单接口API指南
  4. 股票系列,动态规划,加油,九月太浪了,十月不许浪
  5. android中开启线程处理,Android线程与消息处理
  6. php隐藏路径ngnix,thinkphp框架在nginx环境下去掉index.php路径显示
  7. 修改pom文件_自动化测试基础篇:Selenium 框架设计(POM)
  8. 应用程序正在为首次使用计算机做准备
  9. 224秒!ImageNet上训练ResNet-50最佳战绩出炉,索尼下血本破纪录
  10. python 等号 什么编码_Python运算符与编码
  11. java mp4转码 h264_10分钟学会Jave视频转码avi--gt;mp4(h264编码格式)!_Java_七九推...
  12. springBoot的学习整理 摘抄蚂蚁课堂
  13. 工控协议——S7通讯协议
  14. 企业致胜在于人本管理--盖洛普著名的Q12
  15. windows透明加密 minifilter
  16. element-ui的el-menu路由模式下选中无颜色
  17. Excel表格中的三维气泡图,你会做吗?
  18. 《黄昏清兵卫》中学到的工作态度
  19. IBM微码刷新(一)使用BoMC制作微码刷新介质-cuixf@DC
  20. 查看新增串口、USB设备

热门文章

  1. QMS-云质-质量管理-质量过剩还意味着什么?
  2. html文本框同步,同步组合框HTML文本框与
  3. PPT文件如何转成PDF格式?一招教你搞定
  4. 基于深度学习GPU+FPGA 双光谱视频处理模块
  5. c语言银行卡管理系统实验报告,C++编写的简单银行卡管理系统
  6. boost中的数据类型转换之lexical_cast
  7. 爬取前程无忧网站上python的招聘信息。
  8. 图表即代码:使用 Diagrams 制作云系统架构原型图
  9. 新书推荐 |《5G NR标准:下一代无线通信技术》
  10. hdu 4521 小明序列