【问题标题】:JAVA: how to read very long lines in a tabstop delimitered txt.fileJAVA:如何在制表符分隔的 text.file 中读取很长的行
【发布时间】:2016-04-29 15:43:53
【问题描述】:

我想读取一个 .txt 文件,它是 tabstop 格式的表格,如下所示:

1    ABC    short text
2    DEF    very very long text....
3    GHI    short text
4    JKL    short text

问题是,当文本很长(这意味着只有几 KB 而不是 GB 左右 ;-))时,不会读取整行。 我使用此代码进行阅读:

try {
     InputStream fis = new FileInputStream(file.getAbsolutePath());
     InputStreamReader isr = new InputStreamReader(fis, Charset.forName("ISO-8859-1"));
     BufferedReader br = new BufferedReader(isr);

     while ((line = br.readLine()) != null) {
           String[] values = line.split("\t", -1); // don't truncate empty fields
           System.out.println(values[0] + " " + values[1] + " " + values[2]);                  
     }
}

为了更好地解释问题: 上表的结果是这样的(不应该这样):

1    ABC    short text
2    DEF    very very lo

【问题讨论】:

  • 你可以试试this answer
  • 很长的意思是几 KB 之类的东西。我认为它在超过 255 个字符的行上会中断。
  • 你真的在打OOM吗?或者从逻辑上讲,您认为它实际上并没有阅读整行?当您说“问题是,未读取整行”时,我试图了解问题到底是什么,您是否看到错误?

标签: java bufferedreader readline


【解决方案1】:

您可以编写一个更复杂的解析器,它一次读取一个字符,直到遇到 TAB 或 EOL,将字符放入缓冲区。在 TAB 处,处理缓冲区,增加列计数,然后清除缓冲区。在 EOL 处,处理缓冲区,将列数设置为 0,然后清除缓冲区。

【讨论】:

    猜你喜欢
    • 2012-12-30
    • 2015-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-18
    • 2023-03-31
    • 2011-12-21
    • 1970-01-01
    相关资源
    最近更新 更多