当前位置: 首页 > 知识库问答 >
问题:

System.Out.Println在System.Out上的printWriter之后不工作

艾学海
2023-03-14
FileStream fs = new FileStream(); //ByteStreamReader
String source = "./test_zh.txt";
CharacterStream cs = new CharacterStream(); //CharacterStreamReader
System.out.println("\nChinese Sentence using ByteStreamReader");
fs.printOnConsole(source); //if i comment this, then below lines gets printed 
System.out.println("\nChinese Sentence using CharacterStreamReader");//Not getting printed on console
cs.printOnConsole(source); //Not getting printed on console

这两种流类型的代码如下所示:

public void printOnConsole(String source) throws IOException{
try{
    inp = new FileInputStream(source);
    pwr = new PrintWriter(System.out,true);
    int c =0;

    while( (c = inp.read()) != -1){
        pwr.write(c);
        pwr.write("(" + c +")");
    }
}catch(FileNotFoundException f){

}catch(IOException e){

}finally{
    inp.close();
    pwr.flush();
    pwr.close();

}
}
    public void printOnConsole(String source) throws IOException{
    try{
        fReader = new FileReader(source);
        pwr     = new PrintWriter(System.out,true);
        int c;
        while((c = fReader.read()) != -1){
            pwr.write(c);
            pwr.write("(" +c +")");
        }

    }catch(IOException f){

    }finally{
        fReader.close();
        pwr.flush();
        pwr.close();

    }
    }

共有1个答案

俞新翰
2023-03-14

我可以看到FileStreamCharacterStream类存在两个重要问题。

>

  • 这两个类都对包装system.outprintwriter调用close()。当发生这种情况时,system.out将被关闭,并且不允许对其进行进一步的写操作。

    这两个类都压制IO异常。也就是说,他们捕捉到异常,什么也不说,然后继续,就像什么都没发生一样。这是非常糟糕的编码实践...而且它很可能隐藏了在写入关闭的system.out流时发生的异常。

  •  类似资料:
    • 问题内容: 在阅读有关Java I / O的知识时,我意识到可以通过两种方式写入标准输出。 以下是同时使用这两种技术的代码段 相对于其他使用,是否有任何性能优势? 问题答案: 一个快速的Google透露了Coderanch上的一个线程很有用。 还有其他几种进行控制台编写的方法,但是除了编写更少的代码外,使用一种或另一种似乎没有真正的好处,而且创建新的PrintWriter对象最终会占用更多的内存。

    • 终端: $java Display 1 2 线程“main”java.lang.BootStrapMethoder中出现异常错误:java.lang.NoClassDeffounder错误:java.lang/invoke/StringConcatFactory 在Display.main(Display.java:7) 原因:java.lang.NoClassDeffounder错误:java.

    • 我正在使用它工作得很好,过了一段时间后它就不能工作了,特别是在设备启动后它不能启动了。我已经给出了listner所需的所有权限,这里是我的代码。 这是正常工作的,但经过一段时间和引导完成后,is不工作,我使用启动,但它仍然不工作

    • 问题内容: 这些陈述有什么区别吗 和 问题答案: 已经是, 只会再包装一次,这似乎毫无意义。

    • 最简单的Java程序是helloWorld。只有一个类、一个主函数和一条语句:System。出来println(“你好世界”); 在Eclipse氧气中输入该程序。3A作为一个Java项目,在一个名为helloWorld的包中,在一个名为App的类中,运行在Java 1.8上。 在Eclipse中运行良好,我可以在Eclipse控制台窗口中看到Hello world。在cmd窗口中以java he

    • 我尝试了以下各种组合: 在ap有效载荷中传递了一个空警报 一个空的声音通过ap有效载荷 content_available:真 内容可用: 1 优先级设置为高。我的目标功能在后台模式中启用了后台抓取和远程通知。 这是我的有效载荷的样子: 我一打开应用程序,通知就会进来,但不是在后台。 看起来是这样的: [AnyHasable("body"): NTCIP示例单元:现在显示WALNUT TREE(T