class PinrtStream
PrintStream继承自FilterOutputStream。
其特点主要有
- PrintStream提供了多种打印方法可以对多种类型的数据值进行打印,并能够保持数据的表示形式。
- PrintStream从不抛出IOException
- PrintStream流有自动刷新机制,这意味着数据写入此流后会自动调用flush方法
查看其构造函数可知,主要可以接收三种类型的值:
- 字符串路径(存储此打印流内容的目标位置的文件名称)
PrintStream printStream = new PrintStream("print.txt");//将打印流内容存储在文件名为pinrt.txt的文件中中
- File文件(存储此打印流内容的文件对象)
File file = new File("print.txt");
PrintStream printStream = new PrintStream(file);
- 字节输出流(存储此打印流内容的输出流对象)
PrintStream printStream = new PrintStream(System.out);
需要注意的方法:
public void write(int b);将指定的字节写入此流
由于传递的参数b是int类型的,因此写入的字节是参数b的低八位,b的高14位将被忽略。
PrintStream printStream = new PrintStream(System.out);
printStream.write(97);//将指定的一个字节写入流中
System.out.println();
printStream.write(609);//将指定的一个字节写入流中
printStream.close();
输出结果为:
a
a
PrintStream printStream = new PrintStream(System.out);
printStream.print(610);//打印一个整数 其实质是 将97先变成字符保存原样将数据打印到目的地
printStream.close();
输出结果为:
610
查看其底层代码为:
public void print(int i) {
write(String.valueOf(i));
}
private void write(String s) {
try {
synchronized (this) {
ensureOpen();
textOut.write(s);
textOut.flushBuffer();
charOut.flushBuffer();
if (autoFlush && (s.indexOf('\n') >= 0))
out.flush();
}
}
catch (InterruptedIOException x) {
Thread.currentThread().interrupt();
}
catch (IOException x) {
trouble = true;
}
}
其他的打印方法和上述过程一样
此类也具有flush()方法,这是因为其构造方法具有boolean autoFlush参数,用于设置是否自动刷新
class PrintWriter
PrintWriter类实现PrintStream的所有打印方法
与PrintStream相比,
- 其构造方法可以使用字符输出流
- 此类如果启用自动刷新,它只会在调用的println,printf,或format方法来完成
printWriter.println(readlineString.toUpperCase());
printWriter.print(readlineString.toUpperCase()+"\r\n");
这两句话的效果完全不同,此处不能通过换行符来完成自动刷新的效果
//获取键盘输入流
InputStream in = System.in;
//将字节流转换成字符流
InputStreamReader bufferedInputStream = new InputStreamReader(in);
//创建字符流缓冲对象
BufferedReader bufferedReader = new BufferedReader(bufferedInputStream);
//创建字符打印流对象 true参数 相当于 printWriter.flush();
PrintWriter printWriter = new PrintWriter(System.out, true);
//将输出内容写入文件,并且自动刷新
//PrintWriter printWriter = new PrintWriter(new FileWriter("out.txt"), true);
String readlineString;
while((readlineString = bufferedReader.readLine()) != null)
{
if("over".equals(readlineString))
{
break;
}
printWriter.println(readlineString.toUpperCase());
}
printWriter.close();
bufferedReader.close();
执行结果:
woshi
WOSHI
wahaha
WAHAHA
当使用printWriter.print(readlineString.toUpperCase()+"\r\n");替换printWriter.println(readlineString.toUpperCase());后
输出结果:
woshi
wahaha
over
WOSHI
WAHAHA
说明通过"\r\n"无法达到换行的作用,最后在关闭流的时候完成的刷新操作。