2012-10-21 70 views
0

我正在嘗試以下代碼以打開某個目錄中的文件。文件的名稱是按日期分配的,但缺少一些日期。我想遍歷日期以獲取文件,並使代碼每次無法找到文件時都返回1天,直到它找到一個文件(currentdate是一個全局變量,而奇怪的xml元素是因爲我正在使用處理)。重試打開目錄中的文件

我覺得代碼應該做的是:

  1. 嘗試打開該文件用給出的日期。
  2. 錯誤,它會抓住並獲得一個新的日期。
  3. 重複此過程直至找到有效日期。
  4. 當找到有效日期時,它會轉到break所在的行,並退出循環。

但由於某些原因,它像編輯#怪異的東西,有時它跳躍得太多,尤其是臨近正月# 是我的邏輯不工作的一些原因? 感謝

String strdate=getdatestring(counter); 
int counter=0; 
while(true){ 
     try{ 
     xmldata = new XMLElement(this, "dir/" + strdate + "_filename.xml"); 
     break; 
     }catch(NullPointerException e){ 
     counter +=1; 
     strdate=getdatestring(counter); 
     }} 

String getdatestring(int counter) { 
Date firstdate=new Date(); 
int daystosum=0; 
String strcurrentdate=""; 

if(keyPressed && key=='7'){ 
    daystosum=-7; 
} 
daystosum=daystosum-counter; 

Calendar c=Calendar.getInstance(); 
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); 

try{ 
firstdate=formatter.parse("2012-04-13");//first day of the database 
}catch(ParseException e){ 
    println(e); 
} 
c.setTime(currentdate); 
c.add(Calendar.DATE,daystosum); 
currentdate=c.getTime(); 
if(currentdate.before(firstdate)){ 
    currentdate=firstdate; 
} 
strcurrentdate=formatter.format(currentdate); 

return strcurrentdate; 
} 
+0

你的意思是當'firstdate'在這一行'firstdate = formatter.parse(「2012-04-13」);'是將來嗎? –

+0

對不起,這個問題其實不是真的..我剛剛編輯對不起了。這很奇怪,因爲在4月份,這是第一個月的文件,當我從5月3日移動到例如1周到4月28日,那麼它一直到數據庫的第一天,即4月13日,但它不在其他幾個月的行爲不檢,至少我沒有注意到..即時通訊檢查更多的錯誤,但需要一段時間來加載 – fartagaintuxedo

+0

我只是想了解,哪些數據將來會導致您的問題?在'getdatestring'中只有外部值是firstDate到上面的行。我是否錯過了您的問題域? –

回答

1

我相信一旦你做到這一點,

  daystosum=daystosum-counter; 

你需要到櫃檯重置爲

  counter = 0; 

否則下次就會如減越吹號開始,比如說daystosum是0並且counter是5,之後的daystosum=daystosum-counter;,daystosum將變成-5。再一次,你在while循環中找不到文件,然後計數將增加到6.在這種情況下,你會得到`daystosum=daystosum-counter;-5-6 = -11,但是你希望它移動到-6。重置櫃檯應該是你的問題。

另一方面,我認爲你可以從父目錄中使用file.listFiles()列出文件並執行搜索文件名。在這種情況下,您不會試圖一次又一次打開文件。

+0

這是一個很好的提示,非常感謝,我終於解決了,這是我做的......這個問題與你建議的非常相似,只是一天只能添加一次......if(counter == 0)daystosum = daystosum-counter;其他{ daystosum = -counter; }' – fartagaintuxedo

+0

@fartagaintuxedo:'if(counter == 0){daystosum = daystosum-counter; }'不會做任何事情,只有其他的。所以你可以寫'if(counter!= 0){daystosum = -counter; }'。順便問一下,這裏有什麼問題? –

+0

你是對的, 我認爲錯誤是在與while循環和休息時間的嘗試捕獲,我沒有與Java經驗,我以爲我得到了錯誤,但實際上錯誤是我的代碼中的其他地方。 – fartagaintuxedo