gpt4 book ai didi

java - 用Java读取CSV文件并存储数据

转载 作者:行者123 更新时间:2023-12-02 00:57:23 25 4
gpt4 key购买 nike

我有一个任务需要我用 Java 读取 CSV 文件。我已阅读完它,但我认为我没有按照我想要的方式存储它们,这使我能够在以后的任务中访问它们,例如分析一些数据、构建图表等。CSV 文件的标题中包含多个变量有些变量是数字,有些是字母,这意味着我需要以整数或字符串格式存储它们。

请注意,我没有使用任何库(例如 openCSV)来读取该文件,因为我是初学者并试图熟悉基本的 Java。

下面是nycflight13我读取并存储数据。给出的指令是不接受任何包含单词“NA”的行。

`    public class nycflights13 {

public static void main(String[] args) {
// TODO Auto-generated method stub
List<Flights> NYC13 = readFileFromCSV("flights.csv");

for(Flights a: NYC13) {
System.out.println(a);
}
}

public static List<Flights> readFileFromCSV (String fileName){
List<Flights> flightData = new ArrayList <> ();
Path pathToFile = Paths.get(fileName);

try(BufferedReader br = Files.newBufferedReader(pathToFile,
StandardCharsets.US_ASCII)){
br.readLine();
String line = br.readLine();

while (line != null) {
String [] variable = line.split(",");

//convert string array to list
List<String> list = Arrays.asList(variable);
if(list.contains("NA")) { //Do not take in rows containing "NA"
break;
} else {
Flights dataset = createFlights(variable);
flightData.add(dataset);
}
line = br.readLine();
}
}catch (IOException ioe) {
ioe.printStackTrace();
}

return flightData;
}



private static Flights createFlights (String [] metadata) {
int year = Integer.parseInt(metadata[1]); //convert string into int
int month = Integer.parseInt(metadata[2]); //convert string into int
int day = Integer.parseInt(metadata[3]); //convert string into int
int dep_time = Integer.parseInt(metadata[4]); //convert string into int
String carrier = metadata[10];
String flight = metadata[11];
String origin = metadata[13];
String dest = metadata[14];

return new Flights(year, month, day, dep_time,carrier, flight, origin, dest);
}

}`

下面是我的class Flights (我的变量比我在这里显示的要多):

class Flights {
private int year;
private int month;
private int day;
private int dep_time;
private String carrier;
private String flight;
private String origin;
private String dest;

public Flights(int year, int month, int day, int dep_time, String carrier, String flight, String String origin, String dest) {
this.year = year;
this.month = month;
this.day = day;
this.dep_time = dep_time;
this.carrier = carrier;
this.flight = flight;
this.origin = origin;
this.dest = dest;
}

public int getYear() {return year;}
public void setYear(int year) {this.year = year;}

public int getMonth() {return month;}
public void setMonth(int month) {this.month = month; }

public int getDay() {return day;}
public void setDay(int day) {this.day = day; }

public int getdep_time() {return dep_time;}
public void setdep_time(int dep_time) {this.dep_time = dep_time; }

............
.............
...........


@Override
public String toString() {
return "Flights [year=" + year +", month=" + month +", day=" + day +", dep_time=" +
dep_time +
", carrier=" + carrier + ", flight=" + flight +", origin=" + origin +", dest=" + dest
+", air_time=" + air_time +", distance=" + distance +",
hour=" + hour +", minute=" + minute +
", time_hour=" + time_hour +"]";
`

上面的代码将给出如下结果:

Flights [year=2013, month=1, day=1, dep_time=926, sched_dep_time=929, dep_delay=-3, arr_time=1404, sched_arr_time=1421, arr_delay=-17, carrier="B6", flight=215, tailnum="N775JB", origin="EWR", dest="SJU", air_time=191, distance=1608, hour=9, minute=29, time_hour=2013-01-01 09:00:00]

Flights [year=2013, month=1, day=1, dep_time=926, sched_dep_time=922, dep_delay=4, arr_time=1221, sched_arr_time=1219, arr_delay=2, carrier="B6", flight=57, tailnum="N534JB", origin="JFK", dest="PBI", air_time=151, distance=1028, hour=9, minute=22, time_hour=2013-01-01 09:00:00]

Flights [year=2013, month=1, day=1, dep_time=926, sched_dep_time=928, dep_delay=-2, arr_time=1233, sched_arr_time=1220, arr_delay=13, carrier="UA", flight=1597, tailnum="N27733", origin="EWR", dest="EGE", air_time=287, distance=1726, hour=9, minute=28, time_hour=2013-01-01 09:00:00]

Flights [year=2013, month=1, day=1, dep_time=927, sched_dep_time=930, dep_delay=-3, arr_time=1231, sched_arr_time=1257, arr_delay=-26, carrier="DL", flight=1335, tailnum="N951DL", origin="LGA", dest="RSW", air_time=166, distance=1080, hour=9, minute=30, time_hour=2013-01-01 09:00:00]

我有几个问题:

  1. 我的 csv 数据实际上包含超过 300k 行的数据,但使用我按照上面构建的代码,我只能打印大约 280 行。是不是代码写错了?或者我们在 Eclipse 中的打印行数有上限。

  2. 我想知道如何从 List<Flights> 访问特定变量例如载体或月份来计算载体的总大小或统计该月的频率。

  3. 存储具有多个变量的数据的正确方法是什么?并能够在另一个类中访问它们。或者改进我当前代码的方法。

感谢反馈和时间。太感谢了。

最佳答案

回答您的疑问:

  1. 如果您在执行代码时没有遇到任何错误或异常,则不必担心。 Eclipse 的默认控制台缓冲区大小是有限的。请参阅 - https://javarevisited.blogspot.com/2013/03/how-to-increase-console-buffer-size-in.html

  2. 既然您已经读取了数据,您应该继续将其保存在数据库中。一旦数据库中有数据,您就可以运行您想要的各种查询来获取满足条件的数据。

  3. 我不明白你所说的“用多个变量存储数据的方法”是什么意思。你能澄清一下吗?

关于java - 用Java读取CSV文件并存储数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61172741/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com