【问题标题】:BufferWriter writing to a file [closed]BufferedWriter 写入文件 [关闭]
【发布时间】:2016-06-26 14:27:40
【问题描述】:

以下程序从文件中读取并写入输出文件 .这工作得很好,但我想知道为什么它工作正常。不应该在文件末尾添加一个 extraLine 吗?但是为什么它工作正常。请解释它的行为

输入文件:

abcdefg

定义

输入是 newline + abcdefg +newline+def 就是这样! 根据代码,它应该在最后添加一个额外的行,但它工作正常。


try (
        BufferedReader bufferedReader = new BufferedReader(
            new FileReader(new File("/home/admins/Desktop/Sources/src/input.txt")));
        BufferedWriter bufferedWriter = new BufferedWriter(
            new FileWriter(new File("/home/admins/Desktop/Sources/src/output.txt")))) {
    String c = bufferedReader.readLine();
    while (c != null) {
        bufferedWriter.write(c+"\n");
        c=bufferedReader.readLine();
    }
} catch (FileNotFoundException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}

【问题讨论】:

  • 为什么 呢?你每次调用readLine写一行。
  • bufferedReader.readLine();只会给出没有 \n 的字符串,然后我添加新行以将其写入文件。但是对于最后一行,它不应该再添加一行吗?
  • 确保使用hexedit 之类的工具逐字节查看输出文件的内容,以查看实际存在的内容。使用编写的代码,我希望看到从输入中读取的每一行,然后是换行符。 (但是,如果 as-read 字符串已经包含换行符怎么办?)因此,解决问题的最快方法是使用这样的工具,它会向您显示“不可见”字节。

标签: java bufferedreader


【解决方案1】:

正在打印一个换行符。如果您继续写入文件,内容将在以下行中。

不清楚您是否希望输出中有一个明确的空行,但如果您在 while 循环之后写入文件,它将在 def 之后的行上。

您可能希望在写入文件之前另外trim 输入行,以删除其他空白、不可打印的字符。

你也可以在 write 周围放置一个 if 语句来检查空行,这样你就可以跳过它们

【讨论】:

  • 是的,我希望输出中有一个空行,但这并没有发生。假设在 def 之后有 2 个空行,那么下面的代码在 def 之后写了 2 行并退出代码。但是我认为一定有缺陷,应该多打印一行
  • 您的代码从不打印空行,只是在写入文件后将文件指针移动到下一行的开头
【解决方案2】:

在读取文件时也使用 newspace 技术。喜欢,

while(c != 0){
    fileOutputStream = ("/n" + c); /*then read it as...*/    
    c = "/n" + fileInputStream.readLine();
}

【讨论】:

  • 你能详细说明答案吗?
  • c 是整数还是数字?我认为这不会编译
猜你喜欢
  • 2017-03-21
  • 2017-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多