勿以恶小而为之,勿以善小而不为--------------------------刘备
劝诸君,多行善事积福报,莫作恶
上一章简单介绍了内存操作流 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 文件的内容
一.二.二 格式化打印信息
@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 文件的新内容
二. 字符打印输出流 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 文件的内容
二.二.二 格式化打印信息
@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 的新内容
三. System 对 IO 的支持
我们在刚刚学习 Java的时候,编写的第一个程序,
public class Hello{
public static void main(String[] args){
System.out.println("Hello World!!!");
}
}
会向控制台打印输出 “Hello World!!!”
查看 System 的类 API, 会发现
这儿的 PrintStream 就是 上面的字节打印输出流 PrintStream.
其中, System 类中还有这三个方法,
可以改变输出流的位置, 一会用得上, 先找出来。
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);
}
运行程序,打印输出:
输出,也可以输出到指定的输出流
三.一.二 输出信息到指定的输出流
@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 文件有相应的信息。
三.二 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("出错了");
}
}
运行程序,观察控制台输出:
两者效果是一样的, 只是输出信息的字体颜色有些区别。
三.二.二 输出错误信息到指定的输出流
@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 文件内容
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));
}
运行程序, 控制台可以输入相应的内容, 会阻塞程序
输入的内容,都会当成字节数组, 无论是数字,还是小数,还是布尔。 需要我们手动区分。
三.三.二 指定输入源
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));
}
运行程序,控制台打印输出:
谢谢您的观看,如果喜欢,请关注我,再次感谢 !!!