我想一次迭代一行文本文件,对内容进行操作,并将结果传输到单独的文件中. BufferedReader.readLine()的教科书案例.
但是:我需要将我的线条与换行符粘在一起,如果原始文件没有我的平台的“正确”换行符(Linux上的DOS文件,反之亦然),该怎么办?我想我可以在流中稍微阅读一下,看看我找到了什么样的行结尾,即使那真的很糟糕.
但是:假设我的输入文件没有尾随换行符.我想保留它们的样子.现在我需要在读取每一行之前先查看下一行的结尾.在这一点上,我为什么要使用一个给我readLine()的类呢?
这似乎应该是一个解决的问题.是否有一个库(甚至更好的核心Java7类!)只是让我调用类似于readLine()的方法,它从流中返回一行文本,EOL字符是否完整?
解决方法:
这是一个按char读取char的实现,直到找到一个行终止符.传入的阅读器必须支持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());
}