System.out.println 在 System.out 上的 printWriter 之后不工作
System.out.println not working after printWriter on 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 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();
}
}
我发现您的 FileStream
和 CharacterStream
class 有 2 个重大问题。
两个 class 都在包装 System.out
的 PrintWriter
上调用 close()
。发生这种情况时,System.out
将被关闭,并且不允许对其进行进一步写入。
两个 classes squash IO 异常。也就是说,他们捕获异常,什么也不说,然后继续,就好像什么也没发生一样。这是非常糟糕的编码实践......并且很可能隐藏了写入关闭的 System.out
流时发生的异常。
还有各种各样的风格问题,其中最糟糕的是你对方法和class名称的选择不当。例如,printOnConsole 方法不会在控制台上打印。相反,它们在标准输出流上打印……它可能会转到控制台以外的其他地方。 (而您的应用程序无法分辨!!)
我面临一个相当不寻常的情况。我正在使用 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 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();
}
}
我发现您的 FileStream
和 CharacterStream
class 有 2 个重大问题。
两个 class 都在包装
System.out
的PrintWriter
上调用close()
。发生这种情况时,System.out
将被关闭,并且不允许对其进行进一步写入。两个 classes squash IO 异常。也就是说,他们捕获异常,什么也不说,然后继续,就好像什么也没发生一样。这是非常糟糕的编码实践......并且很可能隐藏了写入关闭的
System.out
流时发生的异常。
还有各种各样的风格问题,其中最糟糕的是你对方法和class名称的选择不当。例如,printOnConsole 方法不会在控制台上打印。相反,它们在标准输出流上打印……它可能会转到控制台以外的其他地方。 (而您的应用程序无法分辨!!)