2012-01-03 83 views
0

我有一个方法,从一个.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; 
} 
+1

你可以读取它,但只是在返回数组之前删除最后一行? – 2012-01-03 22:41:28

回答

2

你可以跳过第一行,只读一下,什么都不做。只是你的while循环之前:

br.readLine(); 

为了确保您的数组是正确的大小和线条获取存储在适当的地方,你也应该进行这些更改:

String[][] stock_array = new String[lnr.getLineNumber()-1][3]; 
... 
int line = lnr.getLineNumber()-2; 
1

您的代码据我所知,效率不高。此外,您正在使用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; 
    }