在System.out上的printWriter之后,System.out.println无法正常工作

时间:2017-06-13 10:28:55

标签: java printwriter system.out

我面临一个相当不寻常的情况。我在printWriter使用System.out 将文件中的字节打印到控制台上,首先使用ByteStreamReader然后使用CharacterStreamReader。问题是在输出ByteStreamReader之后,后续的System.out.println语句没有在控制台上打印任何内容。我尝试在System.out.flush()上使用flush但仍未获得输出。

代码:

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

我的两种Stream类型的代码如下:

FileSteam类

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();

}
}

CharacterStream类

    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 个答案:

答案 0 :(得分:0)

您的FileStreamCharacterStream课程存在(至少)2个重大问题。

  • 这两个课程都会在close() PrintWriter上打System.out。当发生这种情况时,System.out将被关闭,并且不允许进一步写入。

  • 两个类压缩 IO异常。那就是他们抓住了例外,什么都不说,继续好像没有发生任何事情。这是非常糟糕的编码实践......并且很可能隐藏了当您写入已关闭的System.out流时发生的异常。

还存在各种风格问题,其中最糟糕的是你选择的方法和类名。例如,printOnConsole方法不在控制台上打印。相反,它们打印在标准输出流上......可能会转到控制台以外的其他位置。 (而你的申请无法告诉!!)