如何递归检索文件

时间:2015-12-02 16:34:48

标签: java recursion

我有一个Java文件,根据今天的日期获取文件。

例如20151202data.csv

如果今天的文件不可用,那就是昨天。该程序获得今天的文件很好,当我尝试回滚时,我遇到错误。回复是空的。

代码

errorCount = 0;
public static JSONArray getJSON(String url)
  HttpClient httpClient = new DefaultHttpClient();
  JSONArray jArray = new JSONArray();
  Object[] q = null;
  Deque<String> queue = new ArrayDeque<String>();
       try{  
            logger.info("\nSending 'GET' request to URL : " + url);
            HttpGet httpGet = new HttpGet(url);
            HttpResponse response = httpClient.execute(httpGet);
            int responseCode = response.getStatusLine().getStatusCode();
            logger.info("Response Code : " + responseCode);
            if (responseCode != 404){
             ...Do Things... 
            else{
             if(errorCount > 0){
               logger.info("Cannot find data.csv for " + getDayBefore(errorCount));
               return null;
             }else{
               errorCount++;
               logger.info("404: Today's file couldn't be found. Using " + getDayBefore(errorCount) + "data.csv");
               getJSON("/data/"+ getDayBefore(errorCount)+"data.csv");
               errorCount = 0;
              }
            }
            return jArray;
        }finally{
            httpClient.getConnectionManager().shutdown();
        }

当我尝试获取昨天的数据时,我得到[]作为回复,即使20151201data.csv20151202data.csv的精确副本,也会记录200个响应代码。

日志

Sending 'GET' request to URL : http://www.test.com/data/20151202data.csv
Response Code : 404
404: Today's file couldn't be found. Using 20151201data.csv
Sending 'GET' request to URL : http://www.test.com/data/20151201data.csv
Response Code : 200

响应

[]

我有什么遗失的吗?

1 个答案:

答案 0 :(得分:-1)

首先,对于这个问题,我不会使用递归,特别是在静态方法上;第二,不清楚在得到响应代码和数据之前会发生什么。

此外,您正在从名为/etc/chef/ohai/hints/ec2.json的方法下载csv。这令人困惑。

从csv到json的转换在哪里?这没有显示。 Http响应代码是200,好的,但响应是空的吗?您是否检查过csv是空的还是只有标题?从csv到json的转换在任何时候都会失败吗?也许回到空名单?

问题更新后

您永远不会返回递归getJson调用的结果

getJson

我会将递归转换为循环,因此更容易阅读。在这种情况下,我不认为递归是正确的工具。