是否有任何Java流输入库保留行结束字符?

我想一次迭代一行文本文件,对内容进行操作,并将结果传输到单独的文件中. 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());
}
上一篇:java – 如何使用InputStream从ZIP读取文件?


下一篇:java – 什么是InputStream和输出流?我们为何以及何时使用它们?