这是一个简单的问题,如何打印选定的文件名,谢谢。
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定律,则可以根据需要随意扩展包装器以包含直通操作。甚至可以将其与,因此可以根据需要在系统中的其他位置替代它。)