【问题标题】:Writing to a file printing blank file [duplicate]写入文件打印空白文件[重复]
【发布时间】:2017-12-12 20:43:03
【问题描述】:

我的程序目前是一个二叉树,由两种类型的节点组成:问题和答案。

树被填充后,我尝试使用树的前序遍历来打印树的结构。我目前的代码是这样的:

private static void writeToFile(LinkedBinaryTreeNode<String> node){
    try {
        PrintWriter writer = new PrintWriter("output.txt");
        node.traversePreorder( n -> {

            if( n.isLeaf() ){
                writer.println("A: " + n.getData());
            } else {
                writer.println("Q: " + n.getData());
            }
        });
    } catch (IOException e ){
        e.printStackTrace();
    }
}

每当我运行程序并创建完整的树并尝试将结构输出到文件时,我都会得到一个空白文件。

我知道自放置以来逻辑是正确的:

System.out.println("A: " + n.getData());

和:

System.out.println("Q: " + n.getData());

在它们各自的位置替换打印机,生成正确的输出到控制台。

【问题讨论】:

  • 更准确地说,你有没有flush()你的Writer? (在某些情况下,close() 在内部调用 flush())。
  • 不,我忘了这样做。是放在 try 块中还是必须放在最后的 finally 子句中?
  • flush() 进入 tryclose() 进入 finally。请注意,您也可以使用try-with-resources,但您必须使用flush

标签: java file-io binary-tree printwriter


【解决方案1】:

关闭作者如下:

private static void writeToFile(LinkedBinaryTreeNode<String> node){
    PrintWriter writer = null;
    try {
        writer = new PrintWriter("output.txt");
        node.traversePreorder( n -> {

            if( n.isLeaf() ){
                writer.println("A: " + n.getData());
            } else {
                writer.println("Q: " + n.getData());
            }
        });
        writer.flush();
    } catch (IOException e ){
        e.printStackTrace();
    } finally {
        if (writer != null) {
            writer.close();
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-18
    • 1970-01-01
    相关资源
    最近更新 更多