0

我正在尝试使用以下代码打开某个目录中的文件。文件的名称是按日期分配的,但缺少某些日期。我想遍历日期以获取文件并让代码在每次找不到文件时返回 1 天,直到最终找到一个文件(currentdate是一个全局变量,奇怪的 xml 元素是因为我正在使用处理) .

我认为代码应该做的是:

  1. 尝试打开具有给定日期的文件。
  2. 出错时,它会捕获并获取新日期。
  3. 重复该过程,直到找到有效日期。
  4. 当找到有效日期时,它会转到 is 所在的行break并退出循环。

但由于某种原因,它会做一些奇怪的事情,比如 EDIT # 有时它会跳得太多,尤其是在第一个月附近 # 我的逻辑是否因为某种原因不起作用?谢谢

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;
}
4

1 回答 1

1

我相信一旦你这样做了,

          daystosum=daystosum-counter;

您需要将计数器重置为

          counter = 0;

否则下一次它将减去更大的数字,例如开始,比如daystosum是 0 和counter5,在 之后daystosum=daystosum-counter;daystosum将变为-5。再次进入 while 循环,找不到文件,然后 count 将增加到 6。在这种情况下,您将获得`daystosum=daystosum-counter;as -5-6 = -11,但您希望它移至-6. 重置计数器应该可以解决您的问题。

另一方面,我认为您可以列出file.listFiles()父目录中使用的文件并对文件名执行搜索。在这种情况下,您不会尝试一次又一次地打开文件。

于 2012-10-21T23:46:36.070 回答