【问题标题】:Issue with PrintWriter?PrintWriter 的问题?
【发布时间】:2016-02-19 17:09:23
【问题描述】:

我有一个方法 (PrintTree),它返回一个包含多行的字符串 (treeString)。字符串如下所示:

html 
head
link
body

当我将它打印到控制台时,它会正确打印字符串。但是,当我尝试使用 printWriter 时,它不会输出任何内容。

PrintWriter out=new PrintWriter(filePath);
out.write(PrintTree(root));
out.close();

我做错了什么?

【问题讨论】:

  • 为什么要使用过时的类开始?使用Files.newBufferedWriter()
  • 你有什么异常吗?
  • 没有例外。当我在构造字符串的方法中取出 \n 时(将所有内容放在一行上),它会打印出来。但是,我正在尝试将所有内容打印在单独的行上。

标签: java printing printwriter


【解决方案1】:

PrintWriter 被缓冲。因此,它只会在其内部缓冲区已满(这是特定于实现的)或您 .flush() 它时“提交”写入。

无论如何,这是 2016 年。所以,不要使用它。使用 Files.newBufferedWriter() 和 try-with-resources 语句:

final Path outfile = Paths.get(...);

try (
    final Writer writer = Files.newBufferedWriter(path);
) {
    out.write(PrintTree(root));
}

以这种方式及早发现错误更为重要,quoting the javadoc(强调我的):

此类中的方法从不抛出 I/O 异常,尽管它的某些构造函数可能会。客户端可以通过调用 checkError() 来查询是否发生错误。

而且太容易了,太容易了,不打电话给.checkError()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-12
    • 2021-08-17
    • 1970-01-01
    • 1970-01-01
    • 2021-08-06
    • 1970-01-01
    • 2015-07-20
    • 1970-01-01
    相关资源
    最近更新 更多