Cod*_*rer 3 java inputstream line-endings bufferedreader
我想一次一行地遍历一个文本文件,对内容进行操作,并将结果流式传输到一个单独的文件中。的教科书案例BufferedReader.readLine()
。
但是:我需要用换行符将我的行粘在一起,如果原始文件没有适用于我的平台的“正确”换行符(Linux 上的 DOS 文件,反之亦然)怎么办?我想我可以在流中提前阅读一下,看看我找到了什么样的行尾,即使那真的很糟糕。
但是:假设我的输入文件没有尾随换行符。我想让事情保持原样。现在我需要在阅读每一行之前先看下一行结尾。在这一点上,为什么我要使用一个完全给我的readLine()
课程?
这似乎应该是一个已解决的问题。是否有一个库(或者甚至更好的核心 Java7 类!)可以让我调用一个类似于readLine()
从流中返回一行文本的方法,并且EOL 字符完好无损?
这是一个逐个字符读取字符直到找到行终止符的实现。传入的 reader 必须支持mark()
,因此如果您的不支持,请将其包装在BufferedReader
.
public static String readLineWithTerm(Reader reader) throws IOException {
if (! reader.markSupported()) {
throw new IllegalArgumentException("reader must support mark()");
}
int code;
StringBuilder line = new StringBuilder();
while ((code = reader.read()) != -1) {
char ch = (char) code;
line.append(ch);
if (ch == '\n') {
break;
} else if (ch == '\r') {
reader.mark(1);
ch = (char) reader.read();
if (ch == '\n') {
line.append(ch);
} else {
reader.reset();
}
break;
}
}
return (line.length() == 0 ? null : line.toString());
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2669 次 |
最近记录: |