FTP读取文件及防止防火墙自动挂起设置

具体代码如下:

 1 /**
 2      * ftp取天气网信息,参数为ftp地址、账号、密码
 3      * @param ip
 4      * @param port
 5      * @param user
 6      * @param pswd
 7      * @param path  文件路径
 8      * @return
 9      */
10     public List<JsonWeatherInfo> getHttpXMLByFTP(String ip,int port,String user,String pswd,String path){
11
12         FTPClient ftpClient = new FTPClient();
13          try {
14            // 连接
15            ftpClient.connect(ip, port) ;
16            // 登录
17            ftpClient.login(user, pswd);
18            if (path != null && path.length() > 0) {
19             // 跳转到指定目录
20             ftpClient.changeWorkingDirectory(path);
21            }
22         }catch (SocketException e) {
23               e.printStackTrace();
24         }catch (IOException e) {
25               e.printStackTrace();
26          }
27         //设置FTPClient为被动传输模式即可解决线程挂起问题,防火墙问题
28         ftpClient.enterLocalPassiveMode();
29
30         logger.info("【连接成功,进行取值】");
31         //根据当前时间,得到需要取的文件名称
32         String dateStr = DateUtil.getFormatDate(DateUtil.getNowDate(),"yyyyMMdd HH:mm:ss");
33         String ymd = dateStr.substring(0, 8);
34         String hhmm = dateStr.substring(9, 15).replace(":", "");
35         int hhmmi = Integer.parseInt(hhmm) ;
36         String zsymd = ymd ;
37         int zshhmmi = hhmmi ;
38
39         String hzStr = "800" ;
40         if(hhmmi<805){
41             //早上8点5分前,取上一天的
42             ymd =  DateUtil.getLastDay("yyyyMMdd HH:mm:ss").substring(0, 8);
43             hzStr = "2000";
44         }else if (hhmmi<1205){
45             //取早8点的
46             hzStr = "0800";
47         }else if (hhmmi<1715){
48             //取中午12点的
49             hzStr = "1200";
50         }else if(hhmmi <=2400){
51             //取下午17点10后的
52             hzStr = "2000";
53         }
54
55         String zsf = "07" ;
56         if(zshhmmi<705){
57         //取前天的指数
58             zsymd = DateUtil.getLastDay("yyyyMMdd HH:mm:ss").substring(0, 8);
59             zsf = "17" ;
60         }else if(zshhmmi<1705){
61             zsf = "07" ;
62         }else if(zshhmmi<=2400){
63             zsf = "17" ;
64         }
65
66         //文件名称
67         String weatherFName = "gn_360_"+ymd+hzStr+".txt" ;
68         String ziwaixianFName = zsymd+zsf+"ziwaixian.txt" ;
69         String chuanyiFName = zsymd+zsf+"chuanyi.txt" ;
70         String xicheFName = zsymd+zsf+"xiche.txt" ;
71         String ganmaoFName = zsymd+zsf+"ganmao.txt" ;
72         String yundongFName = zsymd+zsf+"yundong.txt" ;
73
74         logger.info("【文件名:】"+weatherFName+"##"+ziwaixianFName+"##"+chuanyiFName+"##"+xicheFName+"##"+ganmaoFName+"##"+yundongFName+"##");
75
76         String weatherContent = getStrFromFTP(ftpClient,weatherFName) ;
77         String ziwaixianContent = getStrFromFTP(ftpClient,ziwaixianFName) ;
78         String chuanyiContent = getStrFromFTP(ftpClient,chuanyiFName) ;
79         String xicheContent = getStrFromFTP(ftpClient,xicheFName) ;
80         String ganmaoContent = getStrFromFTP(ftpClient,ganmaoFName) ;
81         String yundongContent = getStrFromFTP(ftpClient,yundongFName) ;
82
83         //将指数指标存储到Map中,key=天气城市id,value=提供了几天的数据,每天区分以#区分,几天不确定
84         logger.info("【取值成功,进行转化到MAP】");
85         HashMap ziwaixianMap = covertZBContentToMap(ziwaixianContent);
86         HashMap chuanyiMap = covertZBContentToMap(chuanyiContent);
87         HashMap xicheMap = covertZBContentToMap(xicheContent);
88         HashMap ganmaoMap = covertZBContentToMap(ganmaoContent);
89         HashMap yundongMap = covertZBContentToMap(yundongContent);
90
91         logger.info("【取值成功,进行逻辑处理】");
92 }

使用到的2个方法如下:

 1     /*
 2      * 获取ftp上指定文件的内容
 3      */
 4     private String getStrFromFTP(FTPClient ftpClient,String fileName){
 5         logger.info("进入取值方法:"+ftpClient.toString()+"fileName:"+fileName);
 6
 7         InputStream ins = null;
 8           StringBuilder builder = null;
 9           try {
10                // 从服务器上读取指定的文件
11               logger.info("进入取值方法try");
12               //设置FTPClient为被动传输模式即可解决线程挂起问题,防火墙问题
13                 ftpClient.enterLocalPassiveMode();
14                 // 设置以二进制形式传输
15                 ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
16                ins = ftpClient.retrieveFileStream(fileName);
17                BufferedReader reader = new BufferedReader(new InputStreamReader(ins, "gbk"));
18                logger.info("进入取值方法try2");
19                String line;
20                builder = new StringBuilder(150);
21                while ((line = reader.readLine()) != null) {
22                 System.out.println(line);
23                 logger.info("line:"+line);
24                 builder.append(line).append("==");
25                }
26                reader.close();
27                if (ins != null) {
28                 ins.close();
29                }
30                // 主动调用一次getReply()把接下来的226消费掉. 这样做是可以解决这个返回null问题
31                logger.info("进入取值方法Reply前");
32                ftpClient.getReply();
33                logger.info("进入取值方法Reply后");
34           } catch (Exception e) {
35               logger.info("【ftp上指定文件的内容出错,文件名为:】"+fileName);
36                e.printStackTrace();
37           }
38           logger.info("取值方法完毕,内容:"+builder.toString());
39           return builder.toString();
40     }
41
42     /*
43      * 指标数组转化到Map,key=城市id,value=提供了几天的数据,每天区分以#区分,几天不确定
44      */
45     private HashMap covertZBContentToMap(String content){
46         HashMap map = new HashMap();
47         String[] ContentArr = content.split("==") ;
48         for(int i=0;i<ContentArr.length;i++){
49             String[] vauleArr = ContentArr[i].split("\\|\\|") ;
50             String key = vauleArr[1].trim() ;
51             if(map.containsKey(key)){
52                 //如果已存储了key,则表示多天的数据, 则把数据拼接,连接符#
53                 String temp = (String)map.get(key) + "#" + ContentArr[i] ;
54                 map.remove(key);
55                 map.put(key, temp) ;
56             }else{
57                 map.put(key, ContentArr[i]) ;
58             }
59         }
60         logger.info("map长度:"+map.size());
61         return map ;
62     }

FTP读取文件及防止防火墙自动挂起设置

时间: 2024-08-29 06:51:31

FTP读取文件及防止防火墙自动挂起设置的相关文章

使用ftp读取文件夹中的多个文件,并删除

public class FTPUtils { private static final Logger LOG = LoggerFactory.getLogger(FTPUtils.class); /** * 获取FTPClient对象 * * @param ftpHost FTP主机服务器 * @param ftpPassword FTP 登录密码 * @param ftpUserName FTP登录用户名 * @param ftpPort FTP端口 默认为21 * @return */ p

7 RandomAccessFile读取文件内容保存--简单例子(需要验证)

1 import org.slf4j.Logger; 2 import org.slf4j.LoggerFactory; 3 4 import java.io.*; 5 6 /** 7 * 读取动态产生的文件内容 8 */ 9 public class RandomAccessRead { 10 public static Logger logger= LoggerFactory.getLogger(RandomAccessRead.class); 11 12 //文件默认读取位置为从开始读取

【ABAP系列】SAP ABAP 实现FTP的文件上传与下载

公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP 实现FTP的文件上传与下载 前言部分 大家可以关注我的公众号,公众号里的排版更好,阅读更舒适. 正文部分 在SAP的实际应用中,经常会需要将生成的文件上传到FTP,或从FTP下载相关文档数据.本例实现将本地指定文件上传到FTP,及从FTP下载文件到本地的功能. 从FTP复制文件共有两种方式,一种是直接复制文件,另

Spring+Quartz实现定时从FTP服务器读取文件并存入Oracel数据库

package com.nstc.safe.action; import java.io.BufferedReader; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import 

AIX 用SHELL脚本 自动FTP下载文件

用SHELL脚本 自动FTP下载文件:kaiboss1:/weblogic/bboss> uname -xAIX kaiboss1 3315381580 3 5 00C59CB54C00kaiboss1:/weblogic/bboss> more ./memberupload/memberupload.shcd /weblogic/bboss/memberupload/fileftp -inv 10.1.140.123 <<!>memberfile.loguser ftp31

Autofs自动挂在实现

Autofs介绍: mount是用来挂载文件系统的,可以在系统启动的时候挂载也可以在系统启动后挂载.对于本地固定设 备,如硬盘可以使用mount挂载:而光盘.软盘.NFS.SMB等文件系统具有动态性,即需要的时候才有 必要挂载.光驱和软盘我们一般知道什么时候需要挂载,但NFS和SMB共享等就不一定知道了,即我们 一般不能及时知道NFS共享和SMB什么时候可以挂载.而autofs服务就提供这种功能,好像windows中的 光驱自动打开功能,能够及时挂载动态加载的文件系统.免去我们手动挂载的麻烦.要

Android开发之黑名单来电自动挂断

本实例允许用户动态添加号码到黑名单,并实现黑名单来电自动挂断.程序通过创建PhoneStateListener监听器来监听TelephonyManager的通话状态来实现该功能. 由于自Android 10之后Android不再对外公开挂断电话的API,如果需要挂断电话必须使用AIDL与电话管理Service进行通信,并调用服务中的API实现结束电话. 为了调用远程的AIDL Service,开发者需要将Android源码中的如下两个文拷到指定位置: com.android.internal.t

Service-黑名单来电自动挂断

这只是一个学习例程,很多功能有待完善 允许用户动态加载手机通讯录中的电话号码,勾选某些号码作为黑名单,一旦将某些号码设为黑名单,当该号码自动挂断该号码 Android没有对外公开挂断电话的API,如果需要挂断电话,必须使用AIDL与电话管理Service进行通信,并调用服务中的API实现结束通话 为了调用远程的AIDL Service,需要上图所示的两个aidl文件 BlockMain.java  界面提供一个按钮让用户打开对话框来勾选黑名单. public class BlockMain ex

.Net 连接FTP下载文件报错:System.InvalidOperationException: The requested FTP command is not supported when using HTTP proxy

系统环境: Windows + .Net Framework 4.0 问题描述: C#连接FTP下载文件时,在部分电脑上有异常报错,在一部分电脑上是正常的:异常报错的信息:System.InvalidOperationException: The requested FTP command is not supported when using HTTP proxy 分析过程: 在网上搜索到的解决方案,基本都是将代理置为null:request.Proxy = null; 并没有解释其原因. 调