2015-12-02 138 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