从java中读取tsv文件

时间:2017-05-07 12:50:35

标签: java csv

我正在使用java中的缓冲读取器读取tsv文件中的每一行,然后将其存储在数组中并打印数组。但是记录从文件的中间打印而不是从头开始。

public class Test {    
    public static void main(String args[]) throws IOException
    {
        UserItemsTsvParser u=new 
        UserItemsTsvParser("./data/user_items/users_movies.tsv");
        ItemsTsvParser a =new ItemsTsvParser("./data/items/books.tsv");
        while(!(a.hasReachedEndOfFile()))
             {

                a.readNextLine();

             }  
    }
}

我正在调用另一个类的方法:

public ItemsTsvParser(String relativeFilePath) 
        throws IOException {        
    fileReader=new BufferedReader(new FileReader(relativeFilePath));
    System.out.println(relativeFilePath);
    currentLine=fileReader.readLine();

}

/**
 * It reads the next line of the file.
 * @return
 * @throws IOException 
 */
int i=0;
public void readNextLine() throws IOException {

    while((currentLine=fileReader.readLine())!=null)
    {
        System.out.print(i++);
        currentLineTokens=currentLine.split("\t");
        currentItemId=currentLineTokens[0];
        currentItemType=currentLineTokens[1];
        currentItemUri=currentLineTokens[2];
        System.out.println(Arrays.toString(currentLineTokens));
    }
}

/**
 * Returns TRUE if EOF has been reached by the reader.
 * @return
 * @throws IOException 
 */
public boolean hasReachedEndOfFile() throws IOException{

    if(currentLine==null)
    {

        return true;
    }
    else
    {
        return false;
    }
}   

1 个答案:

答案 0 :(得分:0)

.split("\t");是一个非常慢的操作。此外,如果某些字段已转义字符,例如\后跟制表符(\t),或者如果有\后跟字母{{1},则您的解决方案将失败}。

不要使用CSV解析器,因为它不会处理这类事情,你需要一个合适的TSV解析器,例如univocity-parsers提供的解析器。

您可以像这样使用它:

t

希望这有帮助。

免责声明:我是这个图书馆的作者,它的开源和免费(Apache 2.0许可证)