OpenCSV& Java:方法每次运行都会跳过一行?

时间:2014-03-14 20:49:55

标签: java csv jfilechooser opencsv

我要做的是: 使用OpenCSV,编写一种方法,允许我从CSV中的特定列获取信息。该CSV(实际上)只有两行:标题行和一行信息。我需要取一些位并操纵它们将它们放入另一个CSV(但是还没有达到目标)。

问题: 每次调用此方法时,它都会向下移动一行。示例:我搜索产品ID,并在第2行返回产品ID,这很好。然后我再次运行它并搜索描述,它返回第3行的描述。不好。再次运行它,它在第4行找到正确的列。再次,不好。它只需要看第2行。我觉得答案非常简单,但我没有看到它。

public class Application {

    public static String ItemNabber(String item, CSVReader reader, String [] headerLine) throws IOException {
        String passedItem = null;

        try {

                for (int i = 0; i < headerLine.length; i++){
                    if (headerLine[i].equals(item)) //customize name
                    {
                        String [] itemFound = reader.readNext();
                        System.out.println(itemFound[i]);
                        passedItem = itemFound[i];
                        itemFound = null;



                    }

        }

            } 
        catch (FileNotFoundException e) 
            {
            // TODO Auto-generated catch block
            e.printStackTrace();
            }
            return passedItem;
    }

    public static void main(String[] args) throws IOException {
        JFileChooser chooser = new JFileChooser();
        FileNameExtensionFilter myFilter = new FileNameExtensionFilter("Text Files", "txt", "csv");
        chooser.setFileFilter(myFilter);
        int returnVal = chooser.showOpenDialog(null);
            if(returnVal == JFileChooser.APPROVE_OPTION) 
            {
           System.out.println("You chose to open this file: " +
                chooser.getSelectedFile().getAbsolutePath());
            }
            String filePath = String.format(chooser.getSelectedFile().getAbsolutePath());

            CSVReader reader = new CSVReader(new FileReader(filePath), '|');

            String [] headerLine = reader.readNext(); 
            ItemNabber("PRODID", reader, headerLine);
            ItemNabber("DESCR", reader, headerLine);

在此示例中,它找到了正确的PRODID,但是向下搜索一行以查找描述。

提前致谢!

1 个答案:

答案 0 :(得分:1)

你在函数中调用reader.readNext。

String [] itemFound = reader.readNext();

只需读取您想要的行作为字符串参数传递:

String [] headerLine = reader.readNext(); String [] dataLine = reader.readNext();

ItemNabber(&#34; PRODID&#34;,dataLine,headerLine); ItemNabber(&#34; DESCR&#34;,dataLine,headerLine);