回顾
输入流字节输入流:FileInputStreamread()本身没有缓冲,需要加缓冲流BufferedInputStream字符输入流:FileReader本身没有缓冲,需要加缓冲流BufferedReader输入流字节输出流:FileOutputStreamwrite()本身没有缓冲,需要加缓冲流BufferedOutputStream字符输出流:FileWriter本身没有缓冲,需要加缓冲流BufferWriter
1.IO流
1.1字符输入流
字符输入流:FileReader
阅读字符文件(txt)的便利类。图片、音频、视频属于字节不能使用字符流字符流本质还是字节流,只不过需要一个解码的过程。
FileReader案例
package com.qfedu.test1IOliu;import java.io.BufferedReader;import java.io.File;import java.io.FileReader;import java.io.IOException;//字符输入流案例 FileReaderpublic class Demo1 {public static void main(String[] args) throws IOException {//输入流就是磁盘读取到内存//1.创建文件对象,要被读取的文件对象File file = new File("E:/aaa/3.txt");//2.创建字符输入流FileReader fr = new FileReader(file);//3.添加缓冲BufferedReader br = new BufferedReader(fr);//4.字符数组char[] ch = new char[1024 * 4];int length = -1;while((length = br.read(ch)) != -1) {System.out.println(length);}//字符数组是可以在控制台打印的System.out.println(ch);br.close();fr.close();}}
1.2字符输出流
2.常用类
2.1StringBuffer
线程安全的,可变字符串序列
String是不可变的,不改变内存地址
addend:拼接
insert:在指定位置添加
reverse:字符串反转(倒叙)
package com.qfedu.test2changyongclass;public class Demo1 {public static void main(String[] args) {String string = "哈哈";String string1 = string + "呵呵";System.out.println(string1);StringBuffer sb = new StringBuffer("start");System.out.println(sb);sb.append("啊?");//这样拼接 内存地址不变System.out.println(sb);sb.insert(2, "啥");//在指定位置插入字符串System.out.println(sb);StringBuffer sb1 = sb.reverse();//字符串反转System.out.println(sb1);}}
2.2枚举(enum)
java中的枚举是一个特殊的类,一般表示一组常量(final static int WEEK),比如一年有12个月,四个季节
java中定义枚举类使用关键字 enum,常量之间用逗号“,”隔开
package com.qfedu.test3enum;public enum Coler {//下面写常量,而且常量都是大写的RED,GREEN,BULE//代表的就是三种颜色,没必要赋值}
2.2.1使用实例:
package com.qfedu.test3enum;//枚举使用的案例enum Color2{RED,GREEN,BULE}public class Demo2 {public static void main(String[] args) {Color2 color2 = Color2.RED;//枚举类.常量System.out.println(color2);}}
2.2.2枚举在swich case中的使用【重点】
package com.qfedu.test3enum;//枚举在swich case中的使用enum Color3{RED,GREEN,BLUE}public class Demo3 {public static void main(String[] args) {Color3 color3 = Color3.BLUE;switch (color3) {case RED:System.out.println("红色");break;case GREEN:System.out.println("绿色");break;case BLUE:System.out.println("蓝色");break;default:System.out.println("没有这个颜色");break;}}}
2.2.3枚举下面的方法
values(); //返回枚举中所有的值 返回一个数组ordial(); //可以找到每个枚举的常量索引valueof(); //返回指定字符串的枚举常量
package com.qfedu.test3enum;enum Color4{RED,GREEN,BULE}public class Demo4 {public static void main(String[] args) {//返回枚举中所有的值 返回一个数组Color4[] color4s = Color4.values();for (Color4 color4 : color4s) {System.out.println(color4);//可以找到每个枚举的常量索引System.out.println("索引" + color4.ordinal());}System.out.println("----------");//返回指定字符串的枚举常量System.out.println(Color4.valueOf("RED"));System.out.println(Color4.valueOf("YELLOW"));//没有就会报错}}
2.2.4 枚举高级用法
枚举和普通类一样,可以有自己的常量,方法,构造方法等,构造方法只能是private修饰的,外部类不能使用!!!!枚举可以有普通方法,也可以有抽象方法。
枚举中的抽象方法,必须去用常量重写方法
package com.qfedu.test3enum;//枚举高级使用enum Color5{RED {@Overridepublic void eat() {// TODO Auto-generated method stubSystem.out.println("红色");}},GREEN {@Overridepublic void eat() {// TODO Auto-generated method stubSystem.out.println("绿色");}},BULE {@Overridepublic void eat() {// TODO Auto-generated method stubSystem.out.println("蓝色");}};final static int age = 7;private Color5() {//构造方法 外部使用不了}//正常方法public void colorInfo() {System.out.println("颜色的表示形式");}//抽象方法public abstract void eat();}public class Demo5 {public static void main(String[] args) {for (Color5 c5 : Color5.values()) {c5.eat();}System.out.println("------");Color5.BULE.eat();System.out.println(Color5.age);}}
