在第一个循环中,我循环遍历变量rgname,即[Monthly,Quarterly,Yearly]。现在,我创建了另一个名为listDir的方法。如果我在这里传递变量值folder = new File(reportFolderPath + reportPath +“/”+ rgname);然后到方法listDir,它将返回如下所示的数组列表。
List<ReportGroup> reportGroupList = new ArrayList<ReportGroup>();
for (String rgname : reportGroupNames) {
ReportGroup rg = new ReportGroup();
rg.setReportGroupName(rgname);// Report Name such as
// Monthly,Quarterly and
// Yearly
folder = new File(reportFolderPath + reportPath + "/"+ rgname);
List<ReportInfo> reportList = new ArrayList<ReportInfo>();
List<String> reportDescription=listDir(folder);
for(String reportDescr:reportDescription){
System.out.println("*****************Test***************" +reportDescr);
rg.setReportDescr(reportDescr);
}
rg.setReportList(reportList);
reportGroupList.add(rg);
report.setReportGroupList(reportGroupList);
}
}
第二种方法返回arraylist:
public static List<String> listDir(final File folder) {
List<String> dirArray = new ArrayList<String>();
for (final File fi : folder.listFiles()) {
if (fi.isDirectory()) {
dirArray.add(fi.getName());
}
}
return dirArray;
}
输出应该是这样的:
Monthly
-Jan
-Feb
-Continue
Quarterly
-First Quarter
-Second continue
第二个方法返回此值,这是它在执行System.out.println(reportDescription)时打印的内容;
[539_January_2013, 540_February_2013, 541_March_2013, 542_April_2013, 543_May_2013, 544_June_2013, 545_July_2013, 546_August_2013, 547_September_2013, 548_October_2013, 549_November_2013, 550_December_2013, 587_January_2014]
[551_First_Quarter_2013, 554_Second_Quarter_2013, 557_Third_Quarter_2013, 560_Fourth_Quarter_2013]
[123_Year_2010]
答案 0 :(得分:2)
正如chat中所发现的那样,有问题的一行就是:
rg.setReportDescr(reportDescr);
正如我在之前的评论中所假设的,这个是一个标准的setter方法,它将用新的数据覆盖旧数据。因此,最后剩余的数据是列表的最后一个元素:
public void setReportDescr(String reportDescr) {
this.reportDescr = reportDescr;
}
解决此问题的一种简单方法是将整个列表传递给ReportGroup
实例:
List<String> reportDescriptions=listDir(folder);
rg.setReportDescriptions(reportDescriptions); // changed method name a bit
rg.setReportList(reportList);
reportGroupList.add(rg);
在课程ReportGroup
中,行String reportDescr;
应更改为:
List<String> reportDescr;
应该相应地更改getter和setter方法:
public List<String> getReportDescriptions() { // changed method name a bit
return reportDescr;
}
public void setReportDescriptions(List<String> reportDescr) { // changed method name a bit
this.reportDescr = reportDescr;
}
答案 1 :(得分:1)
所以修改后的代码是这样的:
System.out.println(reportDescription);
for(String reportDescr:reportDescription){
System.out.println("*****************Test***************" +reportDescr);
rg.setReportDescr(reportDescr);
}
所以它应该打印如下:
[539_January_2013, 540_February_2013, 541_March_2013, 542_April_2013, 543_May_2013, 544_June_2013, 545_July_2013, 546_August_2013, 547_September_2013, 548_October_2013, 549_November_2013, 550_December_2013, 587_January_2014]
*****************Test***************587_January_2014
[551_First_Quarter_2013, 554_Second_Quarter_2013, 557_Third_Quarter_2013, 560_Fourth_Quarter_2013]
*****************Test***************560_Fourth_Quarter_2013
[123_Year_2010]
*****************Test***************123_Year_2010
正确?
为什么你不能简单地添加所有信息?
答案 2 :(得分:1)
您的代码非常混乱!
我不确定这里的目标是什么,但似乎你正在覆盖文件夹,只有上个月被打印出来。您可以尝试每次创建一个新文件并将其添加到自己的列表中。然后你可以迭代。这里有一些代码,虽然它没有做你想做的事情,但你可以用它来告诉你下一步该做什么:
List<String> monthsList = new ArrayList<String>();
monthsList.add("January");
monthsList.add("June");
monthsList.add("December");
List<File> folderList = new ArrayList<File>();
for(String month : monthsList)
{
File folder = new File("C:\\temp\\"+month);
if(!folder.exists())
{
folder.mkdir();
}
folderList.add(folder);
}
List<String> dirArray = new ArrayList<String>();
for (final File fi : folderList)
{
if(fi.isDirectory())
{
dirArray.add(fi.getAbsolutePath());
}
}
for(String directory : dirArray)
{
System.out.println("*****************Test***************\n" + directory);
}