有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

从PSV文件读取Java

我想用java读取一个PSV文件。我的PSV文件中的记录有4列。我只想读取并输出第3列和第4列。最好的方法是什么。 以下是我所拥有的:

BufferedReader PSVFile = new BufferedReader(new FileReader(fileName));
String dataRow = PSVFile.readLine();
while (dataRow != null)
{
    String[] dataArray = dataRow.split("\n");
    for (String item:dataArray) 
    {
        String[] elements = item.split("|");
        System.out.println(item);
    }
    System.out.println();
    dataRow = PSVFile.readLine();
}
PSVFile.close();
System.out.println();

基于@AljoshaBre建议Iam使用CSVReader,执行以下操作:

reader = new CSVReader(new FileReader(fileName),'|');
String [] nextLine;
while ((nextLine = reader.readNext()) != null) 
{
 System.out.println( nextLine[3] + nextLine[4]);
}

我正在获得所需的输出,但随后出现错误: 线程“main”java中出现异常。lang.ArrayIndexOutofBounds异常:2 在Read_PSV。main(Read_PSV.java:20) 第20行是系统。出来println(nextLine[3]+nextLine[4])


共 (2) 个答案

  1. # 1 楼答案

    OpenCSV是我选择的武器

    这个片段将为您提供第三列和第四列:

    try {
        //last parameter tells it which line (row) to consider as the first one
        CSVReader reader = new CSVReader(new FileReader("res/test.csv"), '|', '\0', 1);
        String[] row;
    
        List<String> columnThree    = new ArrayList<String>();
        List<String> columnFour     = new ArrayList<String>();
    
        while((row = reader.readNext()) != null) {
            columnThree.add(row[2]);
            columnFour.add(row[3]);
        }
        reader.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    

    它会打印出来

    Nikola
    Nenad
    Ljubinka
    Gordana
    

    对于此输入:

    测试。psv

    Name|Surname|Father|Mother
    Aleksandar|Milic|Nikola|Ljubinka
    Nebojsa|Jakovljevic|Nenad|Gordana
    
  2. # 2 楼答案

    Commons Lang在这方面也有很好的课程:

    // get a csv instance (which is cloned, so we can customize it)
    StrTokenizer tokenizer = StrTokenizer.getCSVInstance();
    
    // Set delimiter char
    tokenizer.setDelimiterChar('|');
    
    Scanner scanner = new Scanner(new File("file.psv"));
    while (scanner.hasNextLine()) {
      // set the input on the tokenizer
      tokenizer.reset(scanner.nextLine());
      // get the tokens
      String toks[] = tokenizer.getTokenArray();
    }
    

    注意:strokenizer本身被设计为一次处理一条记录,因此您必须使用类似java的Scanner之类的工具一次处理一行。通过“重置”方法,StrTokenizer本身是可重用的(尽管不是线程安全的)

    它有很多选项,比如引号字符、空格处理、空令牌处理等等。。。不确定opencsv会有哪些选项