【问题标题】:skip inserting first line of csv file跳过插入 csv 文件的第一行
【发布时间】:2012-01-03 22:37:31
【问题描述】:

我有一种方法可以从 .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;
}

【问题讨论】:

  • 你能读进去,然后在返回数组之前删除最后一行吗?

标签: java csv stringtokenizer


【解决方案1】:

你可以跳过第一行,只需阅读它而不做任何事情。在您的 while 循环之前执行此操作:

br.readLine();

为确保您的数组大小正确且行存储在正确的位置,您还应该进行以下更改:

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

【讨论】:

    【解决方案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;
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-18
      • 2018-06-12
      • 2014-04-12
      • 2020-12-15
      • 2019-01-01
      • 2012-06-09
      • 1970-01-01
      相关资源
      最近更新 更多