2012-10-21 45 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