System.out.println 在 System.out 上的 printWriter 之后不工作

System.out.println not working after printWriter on System.out

我面临一个相当不寻常的情况。我正在使用 printWriterSystem.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 Class

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

}
}

字符流Class

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

    }
    }

我发现您的 FileStreamCharacterStream class 有 2 个重大问题。

  • 两个 class 都在包装 System.outPrintWriter 上调用 close()。发生这种情况时,System.out 将被关闭,并且不允许对其进行进一步写入。

  • 两个 classes squash IO 异常。也就是说,他们捕获异常,什么也不说,然后继续,就好像什么也没发生一样。这是非常糟糕的编码实践......并且很可能隐藏了写入关闭的 System.out 流时发生的异常。

还有各种各样的风格问题,其中最糟糕的是你对方法和class名称的选择不当。例如,printOnConsole 方法不会在控制台上打印。相反,它们在标准输出流上打印……它可能会转到控制台以外的其他地方。 (而您的应用程序无法分辨!!)