java - Java- 从 .csv 文件读取并计算 avg
问题描述
如何读取具有 x 行数和 y 列数的 .csv Excel 文件,忽略不相关的单元格(例如名称或空单元格),然后计算相关单元格中数字的平均值?
工作正常,我得到了我需要的所有相关信息,但是当我尝试从 .csv 文件中获取数据时,它返回 IOException
public class Main {
/**
* Station name, read from input file
*/
private static String stationid = null;
/**
* Set of records, read from input file
*/
private static ArrayList<StationRecord> records = new ArrayList<>();
/**
* @param year
*/
public static void listMaxWindByYear(int year) {
records.sort((o1, o2) -> (o2.getMaxWind() - o1.getMaxWind()));
System.out.println("Max Wind by the Station during " + year);
System.out.printf("%-40s%-15s%-20s\n", "Station Name", "Max Wind", "Date");
System.out.printf("%-40s%-15s%-20s\n", "------------", "--------", "----");
int maxWind = records.get(0).getMaxWind();
for (StationRecord record : records) {
if (record.getMaxWind() == maxWind) {
System.out.printf("%-40s%-15d%-20s\n", stationid, record.getMaxWind(),
record.getMonth() + " " + record.getDay() + ", " + record.getYear());
} else {
break;
}
}
System.out.println();
}
public static void listMinWindByYear(int year) {
records.sort((o1, o2) -> (o1.getMinWind() - o2.getMinWind()));
System.out.println("Min Wind by the Station during " + year);
System.out.printf("%-40s%-15s%-20s\n", "Station Name", "Min Wind", "Date");
System.out.printf("%-40s%-15s%-20s\n", "------------", "--------", "----");
int minWind = records.get(0).getMinWind();
for (StationRecord record : records) {
if (record.getMinWind() == minWind) {
System.out.printf("%-40s%-15d%-20s\n", stationid, record.getMinWind(),
record.getMonth() + " " + record.getDay() + ", " + record.getYear());
} else {
break;
}
}
System.out.println();
}
public static double calculateAverageOfAverageWindByYear(int year) {
double total = 0;
int numRecords = 0;
for (StationRecord record : records) {
if (record.getYear() == year) {
total += record.getAverageWind();
numRecords++;
}
}
if (numRecords == 0) {
return 0;
}
return total / numRecords;
}
/**
*
* @param args Unused arguments
*/
public static void main(String[] args) {
Locale.setDefault(Locale.US);
File inputFile = null;
Scanner menuScanner = new Scanner(System.in);
while (true) {
try {
System.out.println("Please, enter input file name:");
inputFile = new File(menuScanner.nextLine());
parseFile(inputFile);
menuScanner.close();
break;
} catch (IOException ioe) {
System.out.println("File Name you entered is not relevant");
}
}
System.out.println();
listMaxWindByYear(2019);
listMinWindByYear(2019);
double overallAverageTemp = calculateAverageOfAverageWindByYear(2019);
System.out.println(stationid + " average Wind: " + String.format("%.1f", overallAverageTemp));
System.out.println();
}
private static void parseFile(File file) throws IOException {
Scanner scanner = null;
try {
scanner = new Scanner(file);
stationid = scanner.nextLine();
while (scanner.hasNextLine()) {
records.add(new StationRecord(scanner.nextLine()));
}
scanner.close();
} catch (InputMismatchException e) {
scanner.close();
throw new IOException();
} catch (NoSuchElementException e) {
scanner.close();
throw new IOException();
}
}
所以总结一下它打算做什么,阅读带有风速列表最大值和最小值的列,并计算屏幕或文件上的平均打印(只能在妈妈处进行屏幕打印)。下一步是计算每年的月平均值、最小值、最大值并打印到文件。
我希望这是可以理解的,并且我可以得到帮助,我对 java 真的很陌生,每一个帮助都将不胜感激。如有必要,请随时编辑我的代码或讲座。
解决方案
推荐阅读
- python - 有没有办法在脚本中运行 `%memit` 而无需将其包装在 iphyton 中
- oracle - Oracle 中的“不喜欢”
- sql - 如何传输列名以替换 presto 列中的数字
- amazon-web-services - aws-lambda 没有 S3 触发调用的日志流
- java - 调用 isVisible() 后 JFrame 不显示,没有错误
- windows - 如何将 Github URL 转换为 Windows 和/或 Apple 计算机可以访问的文件路径
- datetime - 转换为字符串时,日期时间的格式仅与一个用户不同
- celery - 本地主机上的 Apache 气流芹菜工人
- c# - 如何在 C# 中使用 MongoDB Compass 生成的管道来运行聚合管道
- c - icmp_hdr 在 CentOS 6 内核上是错误的