读取Java中的CSV文件并从读取的文件中提取某些数据
我已经使用POJO类将一个csv文件读入Java。该文件有19列标题,我想从其中一列标题中提取信息。我该怎么做?希望得到社区的指导和建议 以下是我的一些代码: 我想从原始变量访问“EWR”,并打印出数据中有多少EWR。我试图使用getter来提取我想要的数据,但没有成功。当我尝试打印尺寸时得到0读取Java中的CSV文件并从读取的文件中提取某些数据,java,csv,bufferedreader,getter-setter,pojo,Java,Csv,Bufferedreader,Getter Setter,Pojo,我已经使用POJO类将一个csv文件读入Java。该文件有19列标题,我想从其中一列标题中提取信息。我该怎么做?希望得到社区的指导和建议 以下是我的一些代码: 我想从原始变量访问“EWR”,并打印出数据中有多少EWR。我试图使用getter来提取我想要的数据,但没有成功。当我尝试打印尺寸时得到0 public class nycflights13 { public static void main(String[] args) { // TODO Auto-gener
public class nycflights13 {
public static void main(String[] args) {
// TODO Auto-generated method stub
NYC13data ABC = new NYC13data ();
List<Flights> EWRairport = new ArrayList <> ();
for (Flights ab : ABC.NYC13.fdata) {
if(ab.getorigin().equals("EWR")){
EWRairport.add(ab);
} else {
continue;
}
}
System.out.println(EWRairport.size());
}
}
这是我的班级flightdata
:
class flightdata {
public List<Flights> fdata;
public List<Flights> readFileFromCSV (String fileName){
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")) {
line = br.readLine();
continue;
} else {
Flights dataset = createFlights(variable);
fdata.add(dataset);
line = br.readLine();
}
}
}catch (IOException ioe) {
ioe.printStackTrace();
}
return fdata;
}
//Did not show all the 19 variables
private static Flights createFlights (String [] metadata) {
int year = Integer.parseInt(metadata[1]);
int month = Integer.parseInt(metadata[2]);
int day = Integer.parseInt(metadata[3]);
String flight = metadata[11];
String tailnum = metadata[12];
String origin = metadata[13];
String dest = metadata[14];
String time_hour = metadata[19];
return new Flights(year, month, day, dep_time, sched_dep_time, dep_delay, arr_time,
sched_arr_time, arr_delay, carrier, flight, tailnum, origin, dest, air_time,
distance, hour, minute, time_hour);
}
public flightdata () {
fdata = new ArrayList <> ();
}
public void printdata () {
for(Flights ab : fdata) {
System.out.println(ab);
}
}
}
class Flights {
private int year; private int month; private int day; private int dep_time;
private int sched_dep_time; private int dep_delay; private int arr_time;
private int sched_arr_time; private int arr_delay; private String carrier;
private String flight; private String tailnum; private String origin;
private String dest; private int air_time; private int distance;
private int hour; private int minute; private String time_hour;
public Flights(int year, int month, int day, int dep_time, int sched_dep_time,
int dep_delay, int arr_time, int sched_arr_time,
int arr_delay, String carrier, String flight, String tailnum,
String origin, String dest, int air_time, int distance,
int hour, int minute, String time_hour) {
this.year = year; this.month = month; this.day = day; this.dep_time = dep_time;
this.sched_dep_time = sched_dep_time; this.dep_delay = dep_delay; this.arr_time = arr_time;
this.sched_arr_time = sched_arr_time; this.arr_delay = arr_delay; this.carrier = carrier;
this.flight = flight; this.tailnum = tailnum; this.origin = origin;
this.dest = dest; this.air_time = air_time; this.distance = distance;
this.hour = hour; this.minute = minute; this.time_hour = time_hour;
}
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 String getcarrier() {return carrier;}
public void setcarrier(String carrier) {this.carrier = carrier;}
public String getflight() {return flight;}
public void setflight(String flight) {this.flight = flight; }
public String gettailnum() {return tailnum;}
public void settailnum(String tailnum) {this.tailnum = tailnum; }
public String getorigin() {return origin;}
public void setorigin(String origin) {this.origin = origin; }
public String getdest() {return dest;}
public void setdest(String dest) {this.dest = dest; }
public String gettime_hour() {return time_hour;}
public void settime_hour(String time_hour) {this.time_hour = time_hour; }
@Override
public String toString() {
return "Flights [year=" + year +", month=" + month +", day=" + day +", dep_time=" + dep_time
+ ", sched_dep_time=" + sched_dep_time +", dep_delay=" + dep_delay +", arr_time=" +
arr_time + ", sched_arr_time=" + sched_arr_time +", arr_delay=" + arr_delay +",
carrier=" + carrier + ", flight=" + flight +", tailnum=" + tailnum +", origin=" +
origin +", dest=" + dest ", air_time=" + air_time +", distance=" + distance +",
hour=" + hour +", minute=" + minute +", time_hour=" + time_hour +"]";
}
}
如果这里有人能告诉我我的代码有什么问题,我将不胜感激。非常感谢 我想我可能已经发现了问题,您的原始csv文件包含单元格格式。清除除
time\u hour
列之外的所有单元格的格式
或者,作为一种快速修复方法,在循环中更改nycflights13
类中的代码
if( ab.getorigin().equals( "\"EWR\"" ) ) // nycflights13 class
作为旁注,如注释中所述,下次使用CSV解析器时,这将避免在处理代码甚至无法编译的CSV文件时出现许多复杂情况。再试一次!!请参阅:您能检查类
nycflights13
中循环中的对象ABC.NYC13.fdata
是否为空吗?我尝试使用由我为上述代码创建的csv,其中包含3列,包括原点,代码按预期工作。如果可能的话,您可以共享完整的csv。@Piotrkoraga我已经尝试了代码,但它不是空的。对于(Flights ab:ABC.NYC13.fdata){System.out.println(ab);},它确实打印了数据。不要使用行读取和split(“,”
)来读取CSV文件。使用CSV解析器!正确的建议是:使用CSV解析器解析CSV文件。是的,我为代码提供了解决方案,并指出了问题所在,而不是建议。@Klaus非常感谢!,它解决了这个问题。在我清除格式之后,我的代码也可以工作。将尝试探索您提到的CSV解析器。如何读取“EWR”的运算符/符号?
if( ab.getorigin().equals( "\"EWR\"" ) ) // nycflights13 class