JAVA:如何读取制表位分隔符中的超长行 txt.file
JAVA: how to read very long lines in a tabstop delimitered txt.file
我想读取一个 table 制表位格式的 .txt 文件,如下所示:
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]);
}
}
为了更好地解释问题:
上面table的结果是这样的(不应该是):
1 ABC short text
2 DEF very very lo
您可以编写更复杂的解析器,它一次读取一个字符,直到遇到 TAB 或 EOL 为止将字符放入缓冲区。在 TAB 处,处理缓冲区,增加列数,然后清除缓冲区。在 EOL 处,处理缓冲区,将列计数设置为 0,然后清除缓冲区。
我想读取一个 table 制表位格式的 .txt 文件,如下所示:
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]);
}
}
为了更好地解释问题: 上面table的结果是这样的(不应该是):
1 ABC short text
2 DEF very very lo
您可以编写更复杂的解析器,它一次读取一个字符,直到遇到 TAB 或 EOL 为止将字符放入缓冲区。在 TAB 处,处理缓冲区,增加列数,然后清除缓冲区。在 EOL 处,处理缓冲区,将列计数设置为 0,然后清除缓冲区。