Java:在不丢失'换行符格式'



如果标题有误导性/错误,请提前道歉,但这是我花了很长一天时间练习Java后能做的最好的事情。(我的大脑正在融化(

我把这段代码放在中间,以读取一个文件并将其复制到另一个文件中,跳过以给定字符串开头的行(BeginOfTheLineToRemove(。它实际上可以删除所需的行,但由于某种原因,它忘记了\n(换行符(。将复制间距和符号。我想不通。我真的希望有人能帮忙。来自意大利的java新手的欢呼;(

public void Remover(String file, String BeginOfTheLineToRemove) {
    File StartingFile = new File(file);
    File EndingFile = new File(StartingFile.getAbsolutePath() + ".tmp");
    BufferedReader br = new BufferedReader(new FileReader(file));
    PrintWriter pw = new PrintWriter(new FileWriter(EndingFile));
    String line;
    while ((line = br.readLine()) != null) {
        if (line.startsWith(LineToRemoveThatBeginWithThis)) {
            continue;
        }
        pw.write(line);
    }
    pw.close();
    br.close();
}

使用pw.println而不是pw.write。println在写入内容后添加换行符。

您使用PrintWriter.write()来写入行-默认情况下不会在末尾写入换行符。请改用println()

这可能会对您有所帮助。

BufferedReader.readLine((方法不读取任何行终止字符。因此,您的行将不包含任何终止字符。

BufferedReader#readLine文档说:

返回:一个包含行内容的字符串,不包括任何行终止字符,如果流的末尾已经到达,则返回null

也就是说,阅读器会从字符串中删除行终止字符,因此您需要再次手动添加它们:

// n on Linux/Mac, rn on Windows
String lineSep = System.getProperty("line.separator"); 
pw.write(line);
pw.write(lineSep);

BufferedReader.readLine((使用换行符来标识行的末尾,并且它返回的字符串不包含该换行符。换行符是一个分隔符,因此它不被视为数据的一部分。

为了弥补这一点,您可以在输出中添加一条换行符,如下所示:

while((line = br.readLine()) != null) {
    if(line.startsWith(LineToRemoveThatBeginWithThis)) continue;
    pw.write(line);
    pw.println();
}

在您写出一行文本后,对PrintWriter.println((的额外调用将打印一行换行符。

在循环外获取系统的行分离器:

String lineSeparator = System.getProperty("line.separator");

然后把它附加到你读过的那一行:

pw.write(line+lineSeparator);

最新更新