当前位置: 首页 > 知识库问答 >
问题:

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

仉姚石
2023-03-14

我有这个代码below.What我想做的是读取一个文本文件,每行都有字符串分隔tabs.For示例(名称\t国家\t ID\t内容),其中\t是tab.Then我想只打印每行的第二列。我试图将整行拆分为标记,但它只适用于文件的第一行,然后它抛出ArrayIndexOutOfBoundsException。此外,当我尝试只打印第一列(标记[0])但不打印标记[1]时,它也很完美,我need.So我需要做什么才能获得每行的第二列?

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个答案

汪庆
2023-03-14

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();
    }
尹俊贤
2023-03-14

如果该行中不存在制表符,则会出现异常。

您应该检查tokens.length()

端木鹏
2023-03-14

如果线条看起来像这样

asdf\t\t\t

那么你就有问题了。您应该使用

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

请参阅Java:字符串拆分():我希望它在最后包含空字符串

 类似资料:
  • 问题内容: 我在Go中找不到功能。我可以弄清楚如何快速编写一个,但是我只是想知道我是否在这里忽略了一些东西。如何逐行读取文件? 问题答案: _注意: 可接受的答案在早期的Go版本中是正确的。 包中有ReadLine函数。 请注意,如果该行不适合读取缓冲区,则该函数将返回不完整的行。如果要始终通过单次调用函数来读取程序中的整行,则需要将该函数封装到自己的函数中,该函数在for循环中进行调用。 之所以

  • 问题内容: 在Java 8中,我看到在Files类中添加了一个名为lines()的新方法,该方法可用于在Java中逐行读取文件。它适用于大文件吗?我的意思是我们可以先加载1000行,然后加载第二组1000行。我有1GB的大文件,能用吗? 有人可以分享代码段的用法吗? 问题答案: 它适用于大文件吗?[…]我有1GB的大文件,能用吗? 据我所知,它也应适用于大文件(但我没有尝试过): 我的意思是我们可

  • 所以我正在写一个代码来获取scanf一个文本文件并返回一个格式化的文本消息日志。我一直在想,当文件扫描行“332982000 20555552002 205551001 7 Webb先生,我能问你一个问题吗?”时,如何在某一点扫描文件中的字符串,并打印E.X点以外的所有字符串我将前4个数字扫描为整数,并将其余写入的文本扫描到从“Mr.Webb”开始的字符数组中。 我尝试使用一个for循环与fsca

  • 我创建了一个方法,根据文件中的行号从文件中读取特定行。它对大多数文件都很好,但当我试图读取一个包含大量非常长的行的文件时,它需要很长时间,特别是当它在文件中的位置越来越深时。我还做了一些调试,似乎也占用了大量内存,但我不确定这是否可以改进。我知道还有一些其他的问题集中在如何从文件中读取某些行,但这个问题主要集中在性能方面。 如何优化此方法以使其比光速更快?

  • 问题内容: 有什么方法可以从文本文件中读取特定行?在API或Apache Commons中。就像是 : 我同意实现起来很简单,但是特别是当文件很大时,效率不是很高。 问题答案: 可以,但是仍然存在效率问题。 或者,您可以使用: 由于有缓冲,这将稍微更有效。 看一下并尝试跳过整行(使用正则表达式)。我无法确定它是否会更有效- 对其进行基准测试。 PS 代表 效率, 我的意思是 记忆效率

  • 问题内容: 我正在尝试读取中给定的文件并将其加载到数组中,其中各项之间用换行符分隔。 到目前为止,这是我做的方法: 我对此不太满意,原因有两个。第一,我正在处理大小从几千字节到数百MB不等的文件。可以想象,使用如此大的字符串是缓慢且笨拙的。其次,这会在执行时冻结UI,这同样是不好的。 我已经考虑过在单独的线程中运行此代码,但是我一直在遇到麻烦,此外,它仍然不能解决处理巨大字符串的问题。 我想做的事