2015-12-02 67 views
0

我有一个Java文件,该文件基于今天的日期获取文件。如何递归检索文件

e.g 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 

响应

[]

有我丢失的东西?

+0

@ guillaumegirod-vitouchkina这正是这是一个失败的案例 –

+0

问题似乎是在检索数据(因为200响应代码是好的)。你的代码在哪里检索URL? –

+0

dataLocation是什么? –

回答

-1

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

此外,您正在从名为getJson的方法下载csv。这很混乱。

从csv到json的转换发生在哪里?没有显示。 Http响应代码是200,好的,但响应是空的吗?你有没有检查csv是空的还是只有标题?从csv到json的转换在任何时候都失败了吗?也许回到空的列表?问题更新后

你永远不返回递归调用getJson

else { 
      errorCount++; 
      logger.info("404: Today's file couldn't be found. Using " + getDayBefore(errorCount) + "data.csv"); 
      /* return */ getJSON("/data/"+ getDayBefore(errorCount)+"data.csv"); 
      errorCount = 0; 
      } 

我将递归转化为一个循环的结果,所以它更容易阅读。在这种情况下,我不认为递归是正确的工具。

+0

你只是在重复我的问题。你提到的一切都在问题中。我的转换对今天的文件工作正常,为什么它不能正常工作与文件的唯一区别是文件名?我在递归调用中丢失了一些东西,它返回空...另外我从文件中检索JSON,而不是下载任何东西 –

+0

它是不可理解的:你使用HttpGet httpGet = new HttpGet(url); - 它正在下载。你在哪里使用dataLocation? –

+0

你永远不会返回递归'getJson'调用的结果。看到更新 – user2560528