JAVA——IO流 篇十(PrintStream和PrintWriter)

class PinrtStream

PrintStream继承自FilterOutputStream
其特点主要有

  1. PrintStream提供了多种打印方法可以对多种类型的数据值进行打印,并能够保持数据的表示形式。
  2. PrintStream从不抛出IOException
  3. 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相比,

  1. 其构造方法可以使用字符输出流
  2. 此类如果启用自动刷新,它只会在调用的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"无法达到换行的作用,最后在关闭流的时候完成的刷新操作。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章