我正在尝试以下代码来打开某个目录中的文件。文件名按日期分配,但缺少某些日期。我想迭代日期来获取文件并使代码在每次找不到文件时返回1天,直到它最终找到一个文件(currentdate
是一个全局变量而奇怪的xml元素是因为我我正在使用处理。
我认为代码应该做的是:
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;
}
答案 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()
列出文件并对文件名执行搜索。在这种情况下,您不会一次又一次地尝试打开文件。