我要做的是: 使用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,但是向下搜索一行以查找描述。
提前致谢!
答案 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);