我面临一个相当不寻常的情况。我在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类型的代码如下:
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();
}
}
答案 0 :(得分:0)
您的FileStream
和CharacterStream
课程存在(至少)2个重大问题。
这两个课程都会在close()
PrintWriter
上打System.out
。当发生这种情况时,System.out
将被关闭,并且不允许进一步写入。
两个类压缩 IO异常。那就是他们抓住了例外,什么都不说,继续好像没有发生任何事情。这是非常糟糕的编码实践......并且很可能隐藏了当您写入已关闭的System.out
流时发生的异常。
还存在各种风格问题,其中最糟糕的是你选择的方法和类名。例如,printOnConsole方法不在控制台上打印。相反,它们打印在标准输出流上......可能会转到控制台以外的其他位置。 (而你的申请无法告诉!!)