勿以恶小而为之,勿以善小而不为--------------------------刘备

劝诸君,多行善事积福报,莫作恶

上一章简单介绍了内存操作流 ByteArrayInputStream和ByteArrayOutputStream(四),如果没有看过,​​请观看上一章​​

打印输出流,是做什么用的呢? 是方便将输出信息打印的流,在显示信息的时候,可以让其有格式地进行显示。 一般,打印输出流输出的对象是屏幕, 但也可以是输出流。 打印输出流,根据字节/字符的不同,又可以分为 字节打印输出流 PrintStream 和字符打印输出流 PrintWriter.

相比较以前讲得输出流, 主要区别是对输出信息进行格式化。

一. 字节打印输出流 PrintStream

一.一 方法

一.一.一 构造方法

一.一.一.一 方法

方法

作用

PrintStream(File file)

传入文件

PrintStream(OutputStream out, boolean autoFlush)

传入一个输出流,autoFlush 表示是否自动刷新

PrintStream(String fileName, String csn)

传入的是文件路径和字符编码

一.一.一.二 演示
@Test
public void conTest() throws Exception{

String path="E:"+ File.separator+"ideaWork"+File.separator+"Java2"+File.separator+"fileSrc"
+File.separator+"p1.txt";
//第一种方式
File file=new File(path);
PrintStream printStream=new PrintStream(file);

//第二种方式 是否自动刷新
PrintStream printStream1=new PrintStream(new FileOutputStream(file),true);

//第三种,文件路径
PrintStream printStream2=new PrintStream(path);

}

一.一.二 普通方法

方法

作用

void close()

关闭流

void flush()

刷新流

void write(int b)

打印单个字节

void write(byte[] buf, int off, int len)

打印字节数组

PrintStream append(char c)

追加打印 单个字节

PrintStream append(CharSequence csq)

打印字符串

PrintStream append(CharSequence csq, int start, int end)

打印一部分字符串

新增加的

void print(String s)

单印单个信息, 重载多种类型

void println(String x)

换行打印信息,重载多种类型

PrintStream printf(String format, Object… args)

打印时格式化信息

PrintStream format(String format, Object… args)

使用指定的格式字符串和参数将格式化的字符串写入此输出流。

一般使用的是 printf() 进行相应的格式化。

格式样式有:

字符

描述

%s

字符串

%d

整数

%f

小数

%c

字符

一.二 演示打印输出

一.二.一 基本打印和换行打印

@Test
public void print1Test() throws Exception{
String path="E:"+ File.separator+"ideaWork"+File.separator+"Java2"+File.separator+"fileSrc"
+File.separator+"p1.txt";
//第一种方式
File file=new File(path);
PrintStream printStream=new PrintStream(new FileOutputStream(file,true),true);

//打印普通的
printStream.print(65);

printStream.print('A');

printStream.print(23.4);

printStream.print("你好啊");

printStream.print(true);

//write方式
printStream.write("\r\n write方式写入进来".getBytes("UTF-8"));
//append
printStream.append("\r\n").append("append方式").append("写入进来");
//换行打印
printStream.println("");
printStream.println("你好啊,我是两个蝴蝶飞");

printStream.close();
}

原先是没有 p1.txt 文件的,会自动创建该文件。

运行程序,查看p1.txt 文件的内容

打印输出流PrintStream和PrintWriter(五)_System对IO支持

一.二.二 格式化打印信息

@Test
public void print3Test() throws Exception{
String path="E:"+ File.separator+"ideaWork"+File.separator+"Java2"+File.separator+"fileSrc"
+File.separator+"p1.txt";
//第一种方式
File file=new File(path);
PrintStream printStream=new PrintStream(new FileOutputStream(file,true),true);
printStream.println("有格式 printf 的打印");

String name="两个蝴蝶飞";
int age=25;
//利用 printf 进行格式化打印
printStream.printf("我是%s,我%d岁了",name,age);

printStream.print("format打印:");
//不能换行
printStream.format("我是%s,我%d岁了",name,age);
printStream.close();
}

运行程序, 查看p1.txt 文件的新内容

打印输出流PrintStream和PrintWriter(五)_PrintStream_02

二. 字符打印输出流 PrintWriter

二.一 方法

二.一.一 构造方法

二.一.一.一 方法

方法

作用

PrintWriter(File file)

传入文件

PrintWriter(OutputStream out, boolean autoFlush)

传入输出流和是否自动刷新标识

PrintWriter(Writer out, boolean autoFlush)

传入字符输出流

PrintWriter(String fileName, String csn)

传入文件路径和文件编码

二.一.一.二 演示
@Test
public void conTest() throws Exception{

String path="E:"+ File.separator+"ideaWork"+File.separator+"Java2"+File.separator+"fileSrc"
+File.separator+"p2.txt";

//第一种方式
File file=new File(path);
PrintWriter printWriter=new PrintWriter(file);

//第二种方式 是否自动刷新
PrintWriter printWriter1=new PrintWriter(new FileOutputStream(file),true);

//第三种

PrintWriter printWriter2=new PrintWriter(
new FileWriter(file),true);

//第四种 文件路径

PrintWriter printWriter3=new PrintWriter(path,"UTF-8");
}

二.一.二 普通方法

方法

作用

void close()

关闭流

void flush()

刷新流

void write(int b)

打印单个字节

void write(char[] buf, int off, int len)

打印字节数组

void write(String s)

打印字符串

void write(String s, int off, int len)

打印字符串的某部分

PrintStream append(char c)

追加打印 单个字节

PrintStream append(CharSequence csq)

打印字符串

PrintStream append(CharSequence csq, int start, int end)

打印一部分字符串

新增加的

void print(String s)

单印单个信息, 重载多种类型

void println(String x)

换行打印信息,重载多种类型

PrintStream printf(String format, Object… args)

打印时格式化信息

PrintStream format(String format, Object… args)

使用指定的格式字符串和参数将格式化的字符串写入此输出流。

二.二 演示 PrintWriter

二.二.一 基本打印和换行打印

@Test
public void print1Test() throws Exception{
String path="E:"+ File.separator+"ideaWork"+File.separator+"Java2"+File.separator+"fileSrc"
+File.separator+"p2.txt";
//第一种方式
File file=new File(path);
PrintWriter printWriter=new PrintWriter(new FileOutputStream(file,true),true);

//打印普通的

printWriter.print(65);

printWriter.print('A');

printWriter.print(23.4);

printWriter.print("你好啊");

printWriter.print(true);

//write方式
printWriter.write("\r\n write 字符数组方式写入进来".toCharArray());
//append
printWriter.append("\r\n").append("append方式").append("写入进来");

printWriter.write("\r\n write 字符串方式写入进来");

printWriter.println("");
printWriter.println("你好啊,我是两个蝴蝶飞");

printWriter.close();
}

原先是没有 p2.txt 文件的,会自动创建该文件。

运行程序,查看p2.txt 文件的内容

打印输出流PrintStream和PrintWriter(五)_打印输出流_03

二.二.二 格式化打印信息

@Test
public void print2Test() throws Exception{
String path="E:"+ File.separator+"ideaWork"+File.separator+"Java2"+File.separator+"fileSrc"
+File.separator+"p2.txt";
//第一种方式
File file=new File(path);
PrintWriter printWriter=new PrintWriter(new FileOutputStream(file,true),true);
printWriter.println("有格式 printf 的打印");

String name="两个蝴蝶飞";
int age=25;
//利用 printf 进行格式化打印
printWriter.printf("我是%s,我%d岁了",name,age);

printWriter.println("format打印:");
//不能换行
printWriter.format("我是%s,我%d岁了",name,age);
printWriter.close();
}

运行程序,查看 p2.txt 的新内容

打印输出流PrintStream和PrintWriter(五)_打印输出流_04

三. System 对 IO 的支持

我们在刚刚学习 Java的时候,编写的第一个程序,

public class Hello{

public static void main(String[] args){

System.out.println("Hello World!!!");
}
}

会向控制台打印输出 “Hello World!!!”

查看 System 的类 API, 会发现

打印输出流PrintStream和PrintWriter(五)_PrintStream_05


这儿的 PrintStream 就是 上面的字节打印输出流 PrintStream.

其中, System 类中还有这三个方法,

打印输出流PrintStream和PrintWriter(五)_System对IO支持_06

可以改变输出流的位置, 一会用得上, 先找出来。

System.in 表示从控制台输入, 用于接收从控制台输入的内容

System.out, 表示输出到控制台,输出正确的信息

System.err, 表示输出到控制台,输出错误的信息。

三.一 System.out

三.一.一 输出信息到控制台

@Test
public void outTest(){

//控制台
PrintStream printStream= System.out;

printStream.print("你好啊");

printStream.println("你好不");

String name="两个蝴蝶飞";
int age=24;
//打印
printStream.printf("名称%s,年龄%d:",name,age);
}

运行程序,打印输出:

打印输出流PrintStream和PrintWriter(五)_System对IO支持_07

输出,也可以输出到指定的输出流

三.一.二 输出信息到指定的输出流

@Test
public void out2Test() throws Exception{


File file=new File("E:"+ File.separator+"ideaWork"+File.separator+"Java2"+File.separator+"fileSrc"
+File.separator+"out.txt");

//设置地方
PrintStream out=new PrintStream(new FileOutputStream(file,true));


//设置输出的地方
System.setOut(out);

out.print("你好啊");

out.println("你好不");

String name="两个蝴蝶飞";
int age=24;
out.printf("名称%s,年龄%d:",name,age);
}

运行程序, 会发现 out.txt 文件有相应的信息。

打印输出流PrintStream和PrintWriter(五)_System对IO支持_08

三.二 System.in

输出的是错误的信息。

三.二.一 输出错误信息到控制台

@Test
public void errTest(){
PrintStream printStream= System.err;

PrintStream out= System.out;
try {
out.printf("正常打印");
printStream.print("错误打印");
int a=10/0;
} catch (Exception e) {
printStream.printf("出错了");
}
}

运行程序,观察控制台输出:

打印输出流PrintStream和PrintWriter(五)_System对IO支持_09

两者效果是一样的, 只是输出信息的字体颜色有些区别。

三.二.二 输出错误信息到指定的输出流

@Test
public void err2Test() throws Exception{


File file=new File("E:"+ File.separator+"ideaWork"+File.separator+"Java2"+File.separator+"fileSrc"
+File.separator+"err.txt");

PrintStream err=new PrintStream(new FileOutputStream(file,true));
//设置内容
System.setErr(err);
err.print("你好啊");

err.println("你好不");

String name="两个蝴蝶飞";
int age=24;
err.printf("名称%s,年龄%d:",name,age);
}

运行程序, 观察 err.txt 文件内容

打印输出流PrintStream和PrintWriter(五)_System对IO支持_10

System.out 与 System.err 没有区别,只能从概念上区分, out输出正确的信息,err输出的是错误的信息。

三.三 System.in

用于接收控制台的输入情况

三.三.一 将控制台当输入源

public static void main(String[] args) {
try {
inTest();
} catch (Exception e) {
e.printStackTrace();
}
}
//注意,是字节读取,会存在乱码情况
public static void inTest() throws Exception{

System.out.println("请输入你的内容:");
InputStream inputStream= System.in;
byte[] bytes=new byte[6];
//将输入的内容放置到 bytes 字节数组里
inputStream.read(bytes);
System.out.println("输出内容:"+new String(bytes));
}

运行程序, 控制台可以输入相应的内容, 会阻塞程序

打印输出流PrintStream和PrintWriter(五)_PrintStream_11

输入的内容,都会当成字节数组, 无论是数字,还是小数,还是布尔。 需要我们手动区分。

三.三.二 指定输入源

public static void main(String[] args) {
try {
in2Test();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void in2Test() throws Exception{


File file=new File("E:"+ File.separator+"ideaWork"+File.separator+"Java2"+File.separator+"fileSrc"
+File.separator+"out.txt");
InputStream in=new FileInputStream(file);
System.out.println("请输入你的内容:");

System.setIn(in);
byte[] bytes=new byte[1024];
int len=in.read(bytes);

System.out.println("输出内容:"+new String(bytes,0,len));
}

运行程序,控制台打印输出:

打印输出流PrintStream和PrintWriter(五)_PrintStream_12

谢谢您的观看,如果喜欢,请关注我,再次感谢 !!!