在Java异常中逐行读取文件的特定列

时间:2016-02-17 19:42:46

标签: java file

我在下面有这个代码。我想要做的是读取一个文本文件,每行都有由tab分隔的字符串。例如(name \ t country \ t id \ t content)其中\ t是选项卡。然后我只打印每行的第二列。我尝试将整行拆分为令牌,但它只对文件的第一行有效,然后抛出ArrayIndexOutOfBoundsException。当我尝试仅打印第一列(标记[0])而不打印我需要的标记[1]时它也是完美的。所以我需要做什么才能获得每行的第二列?

public static void main(String[] args) throws FileNotFoundException, IOException
{
    FileInputStream fis=new FileInputStream("a.txt");
    BufferedReader br = new BufferedReader(new InputStreamReader(dis)) ;
    String line;
    while ((line = br.readLine()) != null) 
    {
        String[] tokens=line.split("\\t");
        System.out.println(tokens[1]);  

    }
    fis.close();
}  

3 个答案:

答案 0 :(得分:1)

如果该行看起来像这样的

asdf\t\t\t

然后你有问题。你应该使用

String[] tokens=line.split("\\t", -1);

请参阅Java: String split(): I want it to include the empty strings at the end

答案 1 :(得分:0)

如果该行中没有选项卡,则会出现异常。

在访问第二个元素之前,你应该检查是否tokens.length()>。

答案 2 :(得分:0)

Java 8:

    try (Stream<String> stream = Files.lines(Paths.get("a.txt"))) {
        stream.map(line -> line.split("\\t"))
                .filter(tokens -> tokens.length > 1)
                .forEach(tokens -> System.out.println(tokens[1]));
    } catch (IOException e) {
        e.printStackTrace();
    }