重试目录中的打开文件

时间:2012-10-21 23:34:52

标签: java datetime try-catch

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

我认为代码应该做的是:

  1. 尝试使用给定日期打开文件。
  2. 出错时,会抓住并获得新的约会。
  3. 重复该过程,直到找到有效日期。
  4. 当找到有效日期时,它会转到break所在的行并退出循环。
  5. 但由于某些原因它会像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;
    }
    

1 个答案:

答案 0 :(得分:1)

我相信一旦你这样做了,

          daystosum=daystosum-counter;

您需要将计数器重置为

          counter = 0;

否则下次会减去更多的数字,例如首先,daystosum为0,counter为5,daystosum=daystosum-counter;之后,daystosum将成为-5。再次进入while循环并找不到文件,然后count将增加到6.在这种情况下,您将获得`daystosum=daystosum-counter;作为-5-6 = -11,但您希望它移至-6 }。重置计数器应该是您的问题。

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