这是一个简单的问题,如何打印选定的文件名,谢谢。

public class CSVMAX {
public CSVRecord hottestInManyDays() {
//select many csv files from my computer
   DirectoryResource dr = new DirectoryResource();
   CSVRecord largestSoFar = null;
//read every row and implement  the method we just define
   for(File f : dr.selectedFiles()) {
    FileResource fr = new FileResource(f);
    CSVRecord currentRow = hottestHourInFile(fr.getCSVParser());
    if (largestSoFar == null) {
       largestSoFar = currentRow;
    }
    else {
    double currentTemp = Double.parseDouble(currentRow.get("TemperatureF"));
        double largestTemp = Double.parseDouble(largestSoFar.get("TemperatureF"));
        //Check if currentRow’s temperature > largestSoFar’s
    if (currentTemp > largestTemp) {
                //If so update largestSoFar to currentRow
            largestSoFar = currentRow;
    }
   }
}
return largestSoFar;
}


在这里我想打印出文件名,但是我不知道该怎么做。

public void testHottestInManyDay () {
    CSVRecord largest = hottestInManyDays();
    System.out.println("hottest temperature on that day was in file " + ***FILENAME*** + largest.get("TemperatureF") +
               " at " + largest.get("TimeEST"));
}
}

最佳答案

最终,似乎hottestInManyDays()需要返回此信息。

CSVRecord是否具有该属性?

像这样:

CSVRecord currentRow = hottestHourInFile(fr.getCSVParser());
currentRow.setFileName(f.getName());


如果没有,是否可以添加这样的属性?

也许CSVRecord没有该属性。但是可以添加吗?:

private String _fileName;

public void setFileName(String fileName) {
    this._fileName = fileName;
}

public String getFileName() {
    return this._fileName;
}


如果没有,您是否可以为这两条信息创建一个包装器类?

如果您不能修改CSVRecord,并且没有所需信息的位置,请将其包装在具有该功能的类中。像这样简单的事情:

class CSVWrapper {

    private CSVRecord _csvRecord;
    private String _fileName;

    // getters and setters for the above
    // maybe also a constructor?  make them final?  your call

}


然后从hottestInManyDays()而不是CSVRecord返回。像这样:

CSVWrapper csvWrapper = new csvWrapper();
csvWrapper.setCSVRecord(currentRow);
csvWrapper.setFileName(f.getName());


当然,根据需要更改方法签名和返回值。



但是,您可以执行此操作,一旦将它放在hottestInManyDays()的返回值上,就可以在使用该值的方法中使用它:

CSVWrapper largest = hottestInManyDays();
System.out.println("hottest temperature on that day was in file " + largest.getFileName() + largest.getCSVRecord().get("TemperatureF") +
           " at " + largest.getCSVRecord().get("TimeEST"));


(注意:如果最末端的位不符合Demeter定律,则可以根据需要随意扩展包装器以包含直通操作。甚至可以将其与,因此可以根据需要在系统中的其他位置替代它。)

09-30 18:52