一、PrintStream类
### --- PrintStream类
——> [打印流和转换流模拟聊天的功能实现]——[打印流和转换流模拟聊天的功能优化]
### --- 基本概念
——> java.io.PrintStream类主要用于更加方便地打印各种数据内容。
二、常用的方法
方法声明 | 功能介绍 |
PrintStream(OutputStream out) | 根据参数指定的引用来构造对象 |
void print(String s) | 用于将参数指定的字符串内容打印出来 |
void println(String x) | 用于打印字符串后并终止该行 |
void flush() | 刷新流 |
void close() | 用于关闭输出流并释放有关的资源 |
三、PrintWriter类
### --- 基本概念
——> java.io.PrintWriter类主要用于将对象的格式化形式打印到文本输出流。
四、常用的方法
方法声明 | 功能介绍 |
PrintWriter(Writer out) | 根据参数指定的引用来构造对象 |
void print(String s) | 将参数指定的字符串内容打印出来 |
void println(String x) | 打印字符串后并终止该行 |
void flush() | 刷新流 |
void close() | 关闭流对象并释放有关的资源 |
### --- 案例题目
——> 不断地提示用户输入要发送的内容,若发送的内容是"bye"则聊天结束,
——> 否则将用户输入的内容写入到文件d:/a.txt中。
——> 要求使用BufferedReader类来读取键盘的输入 System.in代表键盘输入
——> 要求使用PrintStream类负责将数据写入文件
五、OutputStreamWriter类
### --- 基本概念
——> java.io.OutputStreamWriter类主要用于实现从字符流到字节流的转换。
六、常用的方法
方法声明 | 功能介绍 |
OutputStreamWriter(OutputStream out) | 根据参数指定的引用来构造对象 |
OutputStreamWriter(OutputStream out, StringcharsetName) | 根据参数指定的引用和编码构造对象 |
void write(String str) | 将参数指定的字符串写入 |
void flush() | 刷新流 |
void close() | 用于关闭输出流并释放有关的资源 |
七、InputStreamReader类
### --- 基本概念
——> java.io.InputStreamReader类主要用于实现从字节流到字符流的转换。
八、常用的方法
方法声明 | 功能介绍 |
InputStreamReader(InputStream in) | 根据参数指定的引用来构造对象 |
InputStreamReader(InputStream in, StringcharsetName) | 根据参数指定的引用和编码来构造对象 |
int read(char[] cbuf) | 读取字符数据到参数指定的数组 |
void close() | 用于关闭输出流并释放有关的资源 |
package com.yanqi.task17;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.Date;
public class PrintStreamChatTest {
public static void main(String[] args) {
// 由手册可知:构造方法需要的是Reader类型的引用,但Reader类是个抽象类,实参只能传递子类的对象 字符流
// 由手册可知: System.in代表键盘输入, 而且是InputStream类型的 字节流
BufferedReader br = null;
PrintStream ps = null;
try {
br = new BufferedReader(new InputStreamReader(System.in));
ps = new PrintStream(new FileOutputStream("d:/a.txt", true));
// 声明一个boolean类型的变量作为发送方的代表
boolean flag = true;
while(true) {
// 1.提示用户输入要发送的聊天内容并使用变量记录
System.out.println("请" + (flag? "张三": "李四") + "输入要发送的聊天内容:");
String str = br.readLine();
// 2.判断用户输入的内容是否为"bye",若是则聊天结束
if ("bye".equals(str)) {
System.out.println("聊天结束!");
break;
}
// 3.若不是则将用户输入的内容写入到文件d:/a.txt中
//else {
// 获取当前系统时间并调整格式
Date d1 = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
ps.println(sdf.format(d1) + (flag?" 张三说:":" 李四说:") + str);
//}
flag = !flag;
}
ps.println(); // 写入空行 与之前的聊天记录隔开
ps.println();
ps.println();
} catch (IOException e) {
e.printStackTrace();
} finally {
// 4.关闭流对象并释放有关的资源
if (null != ps) {
ps.close();
}
if (null != br) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
十、编译打印
D:\JAVA\jdk-11.0.2\bin\java.exe "-javaagent:D:\IntelliJIDEA\IntelliJ IDEA 2019.3.3\lib\idea_rt.jar=50893:D:\IntelliJIDEA\IntelliJ IDEA 2019.3.3\bin" -Dfile.encoding=UTF-8 -classpath E:\NO.Z.10000——javaproject\NO.H.00001.javase\javase\out\production\javase com.yanqi.task17.PrintStreamChatTest
请张三输入要发送的聊天内容:
我是帅哥
请李四输入要发送的聊天内容:
我不是帅哥
请张三输入要发送的聊天内容:
我是帅哥
请李四输入要发送的聊天内容: