打印流
PrintStream
为其他输出流添加了功能,使它们能够方便地打印各种数据值表示形式。
构造方法:
PrintStream(File file) 接收文件
PrintStream(OutputStream out) 字节输出流
PrintStream(String fileName) 文件路径
PrintWriter
向文本输出流打印对象的格式化表示形式。
PrintWriter(File file) 接收文件
PrintWriter(OutputStream out) 字节输出流
PrintWriter(String fileName) 文件路径
作用:
- 只能作为数据的目的地
- 可以把数据原样输出
- 永远不会抛出IO异常 但是可以抛出其他异常 比如空指针
- 打印流类 相当于可以给其他流对象 装饰一个 原样输出的功能
System.in
是 BufferedInputStream 缓冲输入字节流
作用 接收 键盘输入的内容
System.out
是 PrintStream 打印输出字节流
作用 输出内容到控制台
代码示例:
public class Demo03 {
public static void main(String[] args) throws IOException {
// fun1();
// fun2();
// 读取从键盘输入的数据
InputStream in = System.in;
int len = 0;
StringBuilder sb = new StringBuilder();
while (true) {
if (sb.toString().endsWith("quit")) {
break;
}
// 读取数据 拼接数据
len = in.read();
if (len == '\n') {
System.out.println(sb.toString());
sb.delete(0, sb.length());
}else {
sb.append((char)len);
}
}
}
/**
* @throws FileNotFoundException
*/
public static void fun2() throws FileNotFoundException {
// 打印字节流
File file = new File("/Users/lanou/Desktop/level/001.txt");
PrintWriter pw = new PrintWriter(file);
pw.print("CLANNAD");
pw.print(200);
pw.print(false);
pw.flush();
pw.close();
}
/**
* @throws FileNotFoundException
*/
public static void fun1() throws FileNotFoundException {
File file = new File("/Users/lanou/Desktop/level/001.txt");
FileOutputStream fos = new FileOutputStream(file);
// 创建缓冲字节输出流
BufferedOutputStream bos = new BufferedOutputStream(fos);
// 创建一个打印字节流
PrintStream ps = new PrintStream(bos);
ps.println("CLANNAD");
ps.print(true);
ps.print(100);
ps.print(3.5);
ps.close();
}
}
装饰者模式(设计模式)
思想: 可以通过装饰对原来的功能进行升级
装饰者模式 一般流程:
1. 把被装饰者 写成成员变量 2. 构造方法中 给该成员变量赋值 3. 对原有功能升级
代码举例:
public class Demo02 {
public static void main(String[] args) throws IOException {
// fun1();
FileReader fr = new FileReader("/Users/lanou/Desktop/level/002.txt");
WlLineNumberReader wl = new WlLineNumberReader(fr);
String string ="";
while ((string = wl.wlReader()) != null) {
System.out.println(wl.getNum() + ": " +string);
}
wl.myClose();
}
/**
* @throws FileNotFoundException
* @throws IOException
*/
public static void fun1() throws FileNotFoundException, IOException {
FileReader reader = new FileReader("/Users/lanou/Desktop/level/002.txt");
LineNumberReader Line = new LineNumberReader(reader);
String readLine = "";
while ((readLine = Line.readLine()) != null) {
int lineNumber = Line.getLineNumber();
System.out.println(lineNumber +" "+ readLine);
}
Line.close();
}
}
class WlLineNumberReader{
// 把被装饰者 写成成员变量
private Reader reader;
private int num = 0;
public WlLineNumberReader() {
super();
// TODO Auto-generated constructor stub
}
// 构造方法中传入被装饰者
// 构造方法都是初始化成员变量的
// 所以 被装饰者 应该是 本类的 成员变量
public WlLineNumberReader(Reader reader) {
super();
this.reader = reader;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
// 功能升级 从读字节 升级 到读行
public String wlReader() throws IOException {
num ++;
int len = 0;
StringBuffer buffer = new StringBuffer();
while ((len = reader.read()) != -1) {
if (len == '\n') {
return buffer.toString();
}else {
buffer.append((char)len);
}
}
// 读完了
if (buffer.length() == 0) {
return null;
}
return buffer.toString();
}
// 关闭资源
public void myClose() throws IOException {
reader.close();
}
}