封装流(包装流)

  • ※缓冲流 【字节缓冲流、字符缓冲流】
    • 缓冲流【字节流】文件复制以及BufferedOutputStream的源码查看
    • 缓冲流【字符流】 【读取操作、写出操作】
    • 练习:文本排序:请将文本信息恢复顺序。【使用了字符流的读取和写出操作】
    • 输出的结果只会出现在控制台中不会进行转移到输出文件目录下面
    • 使用比较器进行升降序比较
  • 字符集
  • ※转换流、【InputStreamReader】、【OutputStreamWriter】
      • 案例:
    • ※打印流【字节流】和【字符流】 和 【out】源码查看
    • 练习1
    • 练习2:

总结:

低级流:节点流(基础的字节流和字符流)  InputStream\OutputStream   Reader\Writer
高级流:封装流(对低级流进行包装、提供简易、高级的方法)、节点流--缓冲流 【缓冲数组、性能较好】--缓冲流字节流[和节点流操作一致]  BufferedInputStream\BufferedOutputStream  【操作方法是一样的】--缓冲流字符流  BufferedReader\BufferedWriter 【单个字符、多个字符的读取】 (不同、提供读取一行的操作)--[输入-读取一行] write();--[输出-换行] newLine();-- 字节流BufferedInputStream、BufferedOutputStream-- 字符流BufferedReader\BufferedWriterd--BufferedReader(不同、提供读取一行的操作)--BufferedWriter--转换流  【指定编码==字节流+编码(字符流)】--输出流 InputStreamReader--输入流 OutputStreamWriter--打印流   【打印操作、打印方法(输出流)】--字节输出流 PrintStream--字符输出流 PrintWriter

在已有的流的基础上进行包装,实现高级操作【可以设定字符集编码】
注意:要是出现编码格式不一样,记得先复制后调整编码格式就行,然后再粘贴回来,即可完成不乱码和???的编码格式不一样情况的处理。

※缓冲流 【字节缓冲流、字符缓冲流】

–具备一个内置的缓冲区,默认的大小为8192,所以比普通字节流的操作速率要高
–字符缓冲流【字符输入流有readLine方法、字符输出流有newLine方法】
–注意:在缓冲流中使用flush()方法将缓冲区的数据同步到文件中
–API:
–readLine方法
–newLine方法

缓冲流【字节流】文件复制以及BufferedOutputStream的源码查看

/*** @author Lantzrung* @date 2022年8月1日* @Description*/
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;public class BufferDemo {// 使用场景:一般都是使用字节的缓冲流public static void main(String[] args) throws IOException {// 注意: InputStream和BufferedOutputStream的区别是它存放了一个数组进去// byte[] buff = new byte[1024];里面后还会存放进去BufferedInputStream// 的 protected volatile byte buf[];缓冲数组中进行缓冲操作;// 查看源码BufferedOutputStream缓冲数组的源码这里可以看出它缓冲数组的长度是为8192// public BufferedOutputStream(OutputStream out) {//  this(out, 8192);// }// 这里也可以看出BufferedOutputStream,int size返回的是buf = new// byte[size]的一个数组长度为8192的默认缓冲数组// public BufferedOutputStream(OutputStream out, int size) {//     super(out);// if (size <= 0) {//     throw new IllegalArgumentException("Buffer size <= 0");// }//     buf = new byte[size];// }// 字符的缓冲流 输入-输出 作用提高读写效率 默认的缓冲数组长度为8192 = 1024*8 意思就是它固定当前IO流的操作为8KB了// 也就是说不管你在定义了程序定义的存储数据是多长都会默认当次是为8192的缓冲数组// 应用: 文件复制// --输入InputStream in = new FileInputStream("D:\\Test\\List.wmv");// 封装了低级流-节点流BufferedInputStream input = new BufferedInputStream(in);// -- 输出OutputStream out = new FileOutputStream("D:\\Test\\test\\List.wmv");BufferedOutputStream output = new BufferedOutputStream(out);// --读取--写出byte[] buff = new byte[1024];int len = 0;// 读取并判断while ((len = input.read(buff)) != -1) {// 读取多少写出多少output.write(buff, 0, len);// 同步刷新output.flush();}// 关闭资源input.close();in.close();output.close();out.close();}
}

缓冲流【字符流】 【读取操作、写出操作】


/*** @author Lantzrung* @date 2022年8月1日* @Description*/
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;public class BufferedCharDemo01 {public static void main(String[] args) throws IOException {// 缓冲的字符流// --读取操作read();// --写出操作write();}// 写出操作public static void write() throws IOException {// 缓冲的字符流// --读取操作
//  Writer out = new FileWriter("D:\\files\\los.txt");// 节点流Writer out = new FileWriter("D:\\files\\los.txt",true);// 可以增加追加模式BufferedWriter writer = new BufferedWriter(out);// 封装了低级的字符输入法// 写出数据// append(c) write(str)writer.write("demo test!!");writer.newLine();// 换行writer.flush();// 关闭流writer.close();// flushBuffer();out.close();}public static void read() throws IOException {// 缓冲的字符流// --读取操作Reader in = new FileReader("D:\\files\\los.txt");// 节点流BufferedReader reader = new BufferedReader(in); // 封装了低级的字符输入流// readLine 是读取一行,如果流中的数据读取完了则返回nullString line = "";while ((line = reader.readLine()) != null) {System.out.println(line);}// 关闭流reader.close();in.close();}
}

案例:
一、普通的字节流和缓冲字节流的复制文件速率
二、字符缓冲流读取数据和写出数据的操作

练习:文本排序:请将文本信息恢复顺序。【使用了字符流的读取和写出操作】

文档1排序好–》文本档2

3.侍中、侍郎郭攸之、费祎、董允等,此皆良实,志虑忠纯,是以先帝简拔以遗陛下。愚以为宫中之事,事无大小,悉以咨之,然后施行,必得裨补阙漏,有所广益。
8.愿陛下托臣以讨贼兴复之效,不效,则治臣之罪,以告先帝之灵。若无兴德之言,则责攸之、祎、允等之慢,以彰其咎;陛下亦宜自谋,以咨诹善道,察纳雅言,深追先帝遗诏,臣不胜受恩感激。
4.将军向宠,性行淑均,晓畅军事,试用之于昔日,先帝称之曰能,是以众议举宠为督。愚以为营中之事,悉以咨之,必能使行阵和睦,优劣得所。
2.宫中府中,俱为一体,陟罚臧否,不宜异同。若有作奸犯科及为忠善者,宜付有司论其刑赏,以昭陛下平明之理,不宜偏私,使内外异法也。
1.先帝创业未半而中道崩殂,今天下三分,益州疲弊,此诚危急存亡之秋也。然侍卫之臣不懈于内,忠志之士忘身于外者,盖追先帝之殊遇,欲报之于陛下也。诚宜开张圣听,以光先帝遗德,恢弘志士之气,不宜妄自菲薄,引喻失义,以塞忠谏之路也。
9.今当远离,临表涕零,不知所言。
6.臣本布衣,躬耕于南阳,苟全性命于乱世,不求闻达于诸侯。先帝不以臣卑鄙,猥自枉屈,三顾臣于草庐之中,咨臣以当世之事,由是感激,遂许先帝以驱驰。后值倾覆,受任于败军之际,奉命于危难之间,尔来二十有一年矣。
7.先帝知臣谨慎,故临崩寄臣以大事也。受命以来,夙夜忧叹,恐付托不效,以伤先帝之明,故五月渡泸,深入不毛。今南方已定,兵甲已足,当奖率三军,北定中原,庶竭驽钝,攘除奸凶,兴复汉室,还于旧都。此臣所以报先帝而忠陛下之职分也。至于斟酌损益,进尽忠言,则攸之、祎、允之任也。
5.亲贤臣,远小人,此先汉所以兴隆也;亲小人,远贤臣,此后汉所以倾颓也。先帝在时,每与臣论此事,未尝不叹息痛恨于桓、灵也。侍中、尚书、长史、参军,此悉贞良死节之臣,愿陛下亲之信之,则汉室之隆,可计日而待也。

注意:要是实现的txt文本出现乱码记得改变编码格式为UTF-8

输出的结果只会出现在控制台中不会进行转移到输出文件目录下面

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;/*** @author Lantzrung* @date 2022年8月1日* @Description*/public class BufferedChar {public static void main(String[] args) throws IOException {// 文本拷贝并将其中的内容排序Reader in = new FileReader("D:\\Test\\test.txt");// 节点流BufferedReader reader = new BufferedReader(in);// 封装了低级的字符输入流// --缓冲流输出// -- 写出操作Writer out = new FileWriter("D:\\Test\\test\\test.txt"); // 节点流BufferedWriter writer = new BufferedWriter(out);// 封装了低级的字符输出流// --定义集合ArrayList<String> list = new ArrayList<>();String line = "";// 读取并保存在集合中while ((line = reader.readLine()) != null) {list.add(line);}// 遍历输出for (String string : list) {System.out.println(string);}
}

使用比较器进行升降序比较

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;/*** @author Lantzrung* @date 2022年8月1日* @Description*/public class BufferedChar {public static void main(String[] args) throws IOException {// 文本拷贝并将其中的内容排序Reader in = new FileReader("D:\\Test\\test.txt");// 节点流BufferedReader reader = new BufferedReader(in);// 封装了低级的字符输入流// --缓冲流输出// -- 写出操作Writer out = new FileWriter("D:\\Test\\test\\test.txt"); // 节点流BufferedWriter writer = new BufferedWriter(out);// 封装了低级的字符输出流// --定义集合ArrayList<String> list = new ArrayList<>();String line = "";// 读取并保存在集合中while ((line = reader.readLine()) != null) {list.add(line);}// 对集合进行排序[提供比较器定义比较规则]// 降序操作
//  Collections.sort(list, new Comparator<String>() { // 注意:Collection不加s是接口加s是实现类
//      @Override
//      public int compare(String o1, String o2) {//      return o2.charAt(0) - o1.charAt(0);
//      }
//  });
//   升序操作Collections.sort(list, new Comparator<String>() { // 注意:Collection不加s是接口加s是实现类@Overridepublic int compare(String o1, String o2) {return o1.charAt(0) - o2.charAt(0);}});// 遍历输出for (String string : list) {writer.write(string);writer.newLine();writer.flush();}// 关闭资源reader.close();in.close();writer.close(); // flushBuffer}
}

字符集

字符集:也叫编码表。是一个系统支持的所有字符的集合,包括各国家文字、标点符号、图形符号、数字等。
编码:将字符–》字节
解码:将字节–》字符

ASCII字符集 :
ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统,用于显示现代英语,主要包括控制字符(回车键、退格、换行键等)和可显示字符(英文大小写字符、阿拉伯数字和西文符号)。
基本的ASCII字符集,使用7位(bits)表示一个字符,共128字符。ASCII的扩展字符集使用8位(bits)表示一个字符,共256字符,方便支持欧洲常用字符。
ISO-8859-1字符集:
拉丁码表,别名Latin-1,用于显示欧洲使用的语言,包括荷兰、丹麦、德语、意大利语、西班牙语等。
ISO-8859-1使用单字节编码,兼容ASCII编码。
GBxxx字符集:
GB就是国标的意思,是为了显示中文而设计的一套字符集。
GB2312:简体中文码表。一个小于127的字符的意义与原来相同。但两个大于127的字符连在一起时,就表示一个汉字,这样大约可以组合了包含7000多个简体汉字,此外数学符号、罗马希腊的字母、日文的假名们都编进去了,连在ASCII里本来就有的数字、标点、字母都统统重新编了两个字节长的编码,这就是常说的"全角"字符,而原来在127号以下的那些就叫"半角"字符了。
GBK:最常用的中文码表。是在GB2312标准基础上的扩展规范,使用了双字节编码方案,共收录了21003个汉字,完全兼容GB2312标准,同时支持繁体汉字以及日韩汉字等。
GB18030:最新的中文码表。收录汉字70244个,采用多字节编码,每个字可以由1个、2个或4个字节组成。支持中国国内少数民族的文字,同时支持繁体汉字以及日韩汉字等。
Unicode字符集 :
Unicode编码系统为表达任意语言的任意字符而设计,是业界的一种标准,也称为统一码、标准万国码。
它最多使用4个字节的数字来表达每个字母、符号,或者文字。有三种编码方案,UTF-8、UTF-16和UTF-32。最为常用的UTF-8编码。
UTF-8编码,可以用来表示Unicode标准中任何字符,它是电子邮件、网页及其他存储或传送文字的应用中,优先采用的编码。互联网工程工作小组(IETF)要求所有互联网协议都必须支持UTF-8编码。所以,我们开发Web应用,也要使用UTF-8编码。它使用一至四个字节为每个字符编码,编码规则:
128个US-ASCII字符,只需一个字节编码。
拉丁文等字符,需要二个字节编码。
大部分常用字(含中文),使用三个字节编码。
其他极少使用的Unicode辅助字符,使用四字节编码。

※转换流、【InputStreamReader】、【OutputStreamWriter】

–在构建转换流时,可以封装节点流,并指定编码集

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;/*** @author Lantzrung* @date 2022年8月1日* @Description*/public class TransforDemo {// 使用场景。当需要指定编码进行读写操作时,则使用转换流// 转换流的使用【实现编码之间的转换--字节+编码】 封装的是字节流public static void main(String[] args) throws IOException {//write();//read();}public static void write() throws IOException {// 读取数据--输出流OutputStream out = new FileOutputStream("D:\\day011\\text.txt");OutputStreamWriter writer = new OutputStreamWriter(out, "UTF-8");// 写出writer.write("挺好的");writer.flush();// 关闭流writer.close();out.close();}public static void read() throws IOException {// 读取数据--输入流InputStream in = new FileInputStream("D:\\day011\\text.txt\\");InputStreamReader reader = new InputStreamReader(in, "UTF-8");// 缓冲数组char[] buff = new char[1024];int len = 0;// 循环读取while ((len = reader.read(buff)) != -1) {System.out.println(new String(buff, 0, len));}// 关闭流reader.close();in.close();}
}

案例:

1、键盘输入数据,在控制台中输出,当键盘输入exit的时候退出

2、将data.txt的UTF-8文本内容复制到data1.txt中以GBK的形式

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;/*** @author Lantzrung* @date 2022年8月1日* @Description*/public class TransforTest2 {// 使用场景。当需要指定编码进行读写操作时,则使用转换流// 将data.txt的UTF-8文本内容复制到data1.txt中以GBK的形式public static void main(String[] args) throws IOException {// 注意:要是输出格式是错误的会显示乱码和????????的操作 所以要进行源文件的编码格式
//  InputStream in = new FileInputStream("D:\\Files\\0729\\data.java");
//  InputStreamReader reader = new InputStreamReader(in, "UTF-8");// 这里使用了匿名内部类进行操作InputStreamReader reader = new InputStreamReader(new FileInputStream("D:\\Files\\0729\\data.txt"), "UTF-8");
//  OutputStream out = new FileOutputStream("D:\\Files\\0729\\data.txt");
//  OutputStreamWriter writer = new OutputStreamWriter(out, "GBK");// 这里使用了匿名内部类进行操作OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream("D:\\Files\\0729\\data01.txt"), "GBK");char[] buff = new char[1024];int len = 0;while ((len = reader.read(buff)) != -1) {String str = new String(buff, 0, len); // buff是提供数组,0是开始,len是最后的过程的结束writer.write(str);writer.flush();}// 关闭流reader.close();writer.close();}

※打印流【字节流】和【字符流】 和 【out】源码查看

※–打印流、PrintStream、PrintWriter
–输出语句中的out对象就是PrintStream
–可以使用构造器给打印流设置字符集编码
–PrintStream 设置编码的构造器
PrintStream ps = new PrintStream(file, csn);
PrintStream ps = new PrintStream(fileName, csn);
PrintStream ps = new PrintStream(out, autoFlush, encoding);
–PrintWriter设置编码的构造器
PrintWriter pw = new PrintWriter(file, csn);
PrintWriter pw = new PrintWriter(fileName, csn);
–API:
print()方法:各种类型数据的打印方法,没有换行
printf()方法:安照字符串格式进行打印输出的方法
println()方法:各种类型数据的打印方法,有换行的

使用打印流给文本输出数据【数值、字符、对象】

/*** @author Lantzrung* @date 2022年8月1日* @Description*/
package PrintDemo;import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintStream;
import java.io.PrintWriter;public class PrintDemo {// 转换流【输出、输入】和打印流【输出】// 打印流主要是提供:print、printf、println// 使用场景:输出【涉及编码使用PrintWriter】【一般也是使用PrintWriter】public static void main(String[] args) throws IOException {printStreamDemo();// PrintStream【字节打印流】printWriterDemo();// OutputStreamWriter【字符打印流】【提供字节流或者字符流】}// append(c); write(b);// 这里查看out源码字节码进行操作// System.out.println(); // out本身就是一个PrintStream// * @see java.io.PrintStream#println()// * @see java.io.PrintStream#println(boolean)// * @see java.io.PrintStream#println(char)// * @see java.io.PrintStream#println(char[])// * @see java.io.PrintStream#println(double)// * @see java.io.PrintStream#println(float)// * @see java.io.PrintStream#println(int)// * @see java.io.PrintStream#println(long)// * @see java.io.PrintStream#println(java.lang.Object)// * @see java.io.PrintStream#println(java.lang.String)// OutputStreamWriter【字符打印流】public static void printWriterDemo() throws IOException {// 输出流// OutputStream out = new FileOutputStream("D:\\Files\\0729\\data01.txt", true);// 1、通过封装流来实现指定编码
//  OutputStream out = new FileOutputStream("D:\\Files\\0729\\data01.txt", true);
//  OutputStreamWriter writer = new OutputStreamWriter(out, "UTF-8");// 1、使用了匿名内部类进行操作OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream("D:\\Files\\0729\\data01.txt", true), "UTF-8");// 2、转换流封装字节流,然后打印流封装转换流PrintWriter pw = new PrintWriter(writer);// new PrintWriter(out);//pw.println("姓名:张三");// pw.printf("姓名:%s,年龄:%d", "zhang", 18);// pw.println("hello1");// 刷新pw.flush();// 关闭资源pw.close();}// PrintStream【字节打印流】public static void printStreamDemo() throws IOException {// 输出流
//  OutputStream out = new FileOutputStream("D:\\Files\\0729\\data01.txt", true);
//  // 构建流 //自动刷新 true PrintStream【字节打印流】 无法实现格式转换
//  PrintStream ps = new PrintStream(out, true);OutputStream out = new FileOutputStream("D:\\Files\\0729\\data01.txt", true);OutputStreamWriter writer = new OutputStreamWriter(out, "UTF-8");PrintWriter ps = new PrintWriter(writer);// append(c); write(b);// System.out.println(); //out本身就是一个PrintStreamps.print("hello1");ps.printf("姓名:%s,年龄:%d", "zhang", 18);ps.println("hello1");// 刷新ps.flush();// 关闭资源ps.close();}
}

练习1

【要求:使用打印流、并指定编码为UTF-8】
通过键盘输入模拟用户交流,然后把交流的信息记录在log.txt中。
–格式:【用户1】【时间yyyy-MM-dd HH:mm:ss】【内容】
–当其中用户一个输入exit时,聊天结束。

/*** @author Lantzrung* @date 2022年8月1日* @Description*/
package com.ghomework0801;import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.Writer;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;//【要求:使用打印流、并指定编码为UTF-8】
//通过键盘输入模拟用户交流,然后把交流的信息记录在log.txt中。
//--格式:【用户1】【时间yyyy-MM-dd HH:mm:ss】【内容】
//--当其中用户一个输入exit时,聊天结束。
public class HomeWork01 {public static void main(String[] args) throws IOException {// 通过键盘输入模拟用户交流,然后把交流的信息记录在log.txt中。// 1、创建ScannerScanner sc = new Scanner(System.in);// 构建输出流 字符流 使用追加模式OutputStream writer1 = new FileOutputStream("D:\\Files\\0729\\data01.txt", true);// 追加模式就是不会覆盖OutputStreamWriter writer = new OutputStreamWriter(writer1, "UTF-8");PrintWriter pw = new PrintWriter(writer);//// 定义一个变量boolean oneTurn = true;// 是否第一个用户的回合// 2、实现用户的交流while (true) {int man = oneTurn ? 1 : 2;// 那个用户System.out.println("用户" + man + "请输入发送的信息:");String msg = sc.next();// --格式:【用户1】【时间yyyy-MM-dd HH:mm:ss】【内容】String time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());// System.out.printf("【用户%d】【时间:%s】【内容:%s】", man);String line = "【用户" + man + "】【时间:" + time + "】【内容:" + msg + "】\n";// 格式语句// 输出日志writer.write(line);// 刷新writer.flush();// 切换用户[取反]oneTurn = !oneTurn;// 退出if (msg.equals("exit")) {break;}}// 3、关闭sc.close();writer.close();}
}

练习2:

实现班级学生注册操作、定义方法实现添加一个学生数据,并保存在students.txt中,例如:

Student [code=20220101, name=zhangsan, age=16,address=gz]
Student [code=20220102, name=li, age=15,address=gz]

–提供方法实现根据学生编号返回学生详细数据的方法,例如:

20220102
返回:
Student [code=20220102, name=li, age=15,address=gz]
null
/*** @author Lantzrung* @date 2022年8月1日* @Description*/
package com.g0801homekork;import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;//--实现班级学生注册操作、定义方法实现添加一个学生数据,并保存在students.txt中,例如:
//--提供方法实现根据学生编号返回学生详细数据的方法,例如:
//20220102
//返回:
//Student [code=20220102, name=li, age=15,address=gz]
//nullpublic class Demo01 {}class Clazz {private static String path = "D:\\test\\students.txt";// 绝对路径不用区分进行调用// 测试代码public static void main(String[] args) {// Student [code=20220101, name=zhangsan, age=16,address=gz]// Student [code=20220102, name=li, age=15,address=gz]Student stu = new Student("20220101", "zhangsan", 16, "gz");Student stu1 = new Student("20220102", "li", 15, "gz");// 调用添加数据方法
//  insert(stu);// 把stu的实例对象的数据调用到students文本中去// 调用返回数据方法getStudent("20220101");//返回:Student [code=20220101, name=zhangsan, age=16, gz=gz]getStudent("20220102");//返回:null}// --提供方法实现根据学生编号返回学生详细数据的方法,public static String getStudent(String code) {// 1、构建流【缓冲字符流-读取一行】BufferedReader in = null;try {// 1、构建流【缓冲字符流-读取一行】in = new BufferedReader(new FileReader(path));// 2、遍历条件是否满足String stu = "";while ((stu = in.readLine()) != null) {// 构建格式 code = xxxcode = "code=" + code;if ((stu.contains(code))) {// 返回数据System.out.println("返回:" + stu);// 返回String stureturn stu;}}} catch (IOException e) {e.printStackTrace();} finally {try {in.close();} catch (Exception e2) {e2.printStackTrace();}}// --条件不满足返回nullSystem.out.println("返回:" + null);return null;}// --实现班级学生注册操作、定义方法实现添加一个学生数据、并保存在students.txt中public static void insert(Student student) {// 1、构建流 【字符打印流】OutputStream out = null;OutputStreamWriter writer = null;PrintWriter pw = null;try {// 调用一个方法查询该学号是否有重复,没有则添加// 构建输出流 字符流 使用追加模式out = new FileOutputStream(path, true);// 转换流writer = new OutputStreamWriter(out, "UTF-8");// 字符打印流pw = new PrintWriter(writer, true);// 打印输出pw.println(student.toString());// 刷新pw.flush();} catch (FileNotFoundException | UnsupportedEncodingException e) {e.printStackTrace();} finally {// 关闭流try {pw.close();writer.close();out.close();} catch (IOException e) {e.printStackTrace();}}}
}class Student {// [code=20220101, name=zhangsan, age=16,address=gz]private String code;private String name;private int age;private String address;public Student(String code, String name, int age, String address) {super();this.code = code;this.name = name;this.age = age;this.address = address;}public Student() {super();}@Overridepublic String toString() {return "Student [code=" + code + ", name=" + name + ", age=" + age + ", address=" + address + "]";}}

2※、封装流(包装流派)、缓冲流【字节缓冲流、字符缓冲流】-->【字节缓冲流、字符缓冲流】 、字符集、转换流以及打印流相关推荐

  1. 第13天 缓冲、转换、对象(序列化)和打印流

    缓冲.转换.对象(序列化)和打印流 第一章 缓冲流 1.1 概述 1.2 字节缓冲流 1.3 字符缓冲流 1.4 练习:文本排序 第二章 转换流 2.1 字符编码和字符集 字符编码 字符集 2.2 编 ...

  2. io包下 文件类 字节流 字符流 缓冲流 转换流 序列化流 打印流

    第一章 File类 1.1 概述 java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建.查找和删除等操作. 1.2 构造方法 public File(String pat ...

  3. java基础提升(六):缓冲流、转换流、序列化流、打印流

    这里写目录标题 目标 第一章 缓冲流 1.1 概述 1.2 字节缓冲流 构造方法 效率测试 1.3 字符缓冲流 构造方法 特有方法 1.4 练习:文本排序 案例分析 案例实现 第二章 转换流 2.1 ...

  4. day10【缓冲流、转换流、序列化流、打印流】

    [缓冲流.转换流.序列化流] 主要内容 缓冲流 转换流 序列化流 打印流 教学目标 能够使用字节缓冲流读取数据到程序 能够使用字节缓冲流写出数据到文件 能够明确字符缓冲流的作用和基本用法 能够使用缓冲 ...

  5. JAVA基础-08.File类与IO流-21.【缓冲流、转换流、序列化流、打印流】

    01_缓冲流的原理 02_转换流的原理 03_序列化和反序列化的概述 04_序列号冲突异常的原理和解决方案 day10[缓冲流.转换流.序列化流] 主要内容 缓冲流 转换流 序列化流 打印流 教学目标 ...

  6. 5.2 IO流(File类,Propertis配置文件,其他类(打印流,序列流,操作对象的流(序列化接口),随机访问文件的流,管道流,操作基本数据的流,操作数组的流,操作字符串的流),编码表)

    1.File类 IO流的流对象只能操作设备上的数据.File类:1.用来将文件或者文件夹(也称目录)封装成对象. 2.方便对文件和文件夹的属性信息进行操作.(操作文件夹,文件的属性(创建时间,修改时间 ...

  7. 【java笔记】打印流printStream

    printStream打印流: 继承了OutPutStream 1.只负责输出,不负责读取. 2.不抛出IOException 3.特有的方法:print/printLn(任意类型的值) 构造方法: ...

  8. Java基础(28)数据输入输出流、内存操作流、打印流、随机访问流、序列化与反序列化流、Properties类(集合)

    1. 数据输入输出流 1. 数据输入输出流的概述: (1)以Stream结尾的,一般都是字节流 (2)数据输入流(DataInputStream):数据输入流允许应用程序以与机器无关方式从底层输入流中 ...

  9. 【Java10】lambda表达式(函数式编程),Stream流,File类,字节/字符流,乱码,缓冲/转换/序列化/打印流,Properties

    文章目录 1.lambda表达式标准语法:()->{} 2.lambda表达式简略语法:可推导即可省略 3.lambda表达式原理:lambda效率比匿名内部类高 4.两个函数式接口:Consu ...

最新文章

  1. TCP/IP 协议栈4层结构及3次握手4次挥手
  2. 【LeetCode】最大子序和
  3. 26行代码AC——习题3-2 分子量 (UVa1586,Molar Mass)——解题报告
  4. 使用Advanced Installer将.exe程序重新封装为.msi程序
  5. POJ-Prime Gap 素数筛选+二分查找
  6. 【Flink】FLink 通讯组件 Akka与Actor 模型
  7. vb导入数据到mysql_用VB程序导入与导出MySQL数据的有关问题(急)
  8. JavaScript动态网页制作宝库
  9. MacOS的OCR文字识别,节约时间,提高效率
  10. mysql查询行数据_MySQL数据库~~~~~查询行(文件的内容)
  11. 安卓8.0卡刷杜比音效——magisk模块的安装和使用
  12. mac book pro 音频设备启动失败
  13. EndNote毕业论文参考文献格式输出
  14. 考研复试-数据库知识点速记
  15. 【Blender】Coffe Shop建模思路及常用键、常见问题
  16. 有赞前端SP毁约后的日子
  17. C++/C输出素数,满某个数就换行
  18. python做相册_用Python和Conky做个电子相册,美化你的Linux桌面
  19. 训练孩子思维能力的几种方法
  20. html parser java库_Java解析HTML之HTMLParser使用与详解

热门文章

  1. QT程序打包--教你做一个可安装的应用程序
  2. 「炼丹」AutoDL炼丹日记
  3. 数据中台已成下一风口,它会颠覆数据工程师的工作吗?
  4. win10taskkill强行结束进程_win10强制关闭应用程序的方法
  5. android 世界各国英文简写代码 资源文件
  6. Failed to push the item(s)解决方法
  7. win10看视频全屏底边任务栏还在
  8. 成功解决:Updates were rejected because the tip of your current branch is behind its remote...【解决方法】
  9. 编程人生(1) 我的软件
  10. 电脑配置怎么看?这3种方法就可以轻松查看