跳过插入csv文件的第一行
问题描述:
我有一个方法,从一个.csv文件的数据,并将其放入一个数组向后 (第一行进入最后一个数组插槽),但我想第一行.csv文件不在数组中。我怎么做到这一点?这里是我的代码到目前为止:跳过插入csv文件的第一行
public static String[][] parse(String symbol) throws Exception{
String destination = "C:/"+symbol+"_table.csv";
LineNumberReader lnr = new LineNumberReader(new FileReader(new File(destination)));
lnr.skip(Long.MAX_VALUE);
String[][] stock_array = new String[lnr.getLineNumber()][3];
try{
BufferedReader br = new BufferedReader(new FileReader(destination));
String strLine = "";
StringTokenizer st = null;
int line = lnr.getLineNumber()-1;
while((strLine = br.readLine()) != null){
st = new StringTokenizer(strLine, ",");
while(st.hasMoreTokens()){
stock_array[line][0] = st.nextToken();
st.nextToken();
stock_array[line][1] = st.nextToken();
stock_array[line][2] = st.nextToken();
st.nextToken();
st.nextToken();
st.nextToken();
}
line--;
}
}
catch(Exception e){
System.out.println("Error while reading csv file: " + e);
}
return stock_array;
}
答
你可以跳过第一行,只读一下,什么都不做。只是你的while循环之前:
br.readLine();
为了确保您的数组是正确的大小和线条获取存储在适当的地方,你也应该进行这些更改:
String[][] stock_array = new String[lnr.getLineNumber()-1][3];
...
int line = lnr.getLineNumber()-2;
答
您的代码据我所知,效率不高。此外,您正在使用linenumberreader.skip(long.max_value),这是不正确的/确认的方式来查找文件的行数。 StringTokenizer是一种不赞成使用的分割令牌的方式。我会用以下方式对它进行编码:
public static List<String[]> parse(String symbol) throws Exception {
String destination = "C:/"+symbol+"_table.csv";
List<String[]> lines = new ArrayList<String[]>();
try{
BufferedReader br = new BufferedReader(new FileReader(destination));
int index = 0;
while((line = br.readLine()) != null){
if(index == 0) {
index++;
continue; //skip first line
}
lines.add(line.split(","));
}
if(lines != null && !lines.isEmpty()) {
Collections.reverse(lines);
}
} catch(IOException ioe){
//IOException Handling
} catch(Exception e){
//Exception Handling
}
return lines;
}
你可以读取它,但只是在返回数组之前删除最后一行? – 2012-01-03 22:41:28