字符流

字符流: 只能操作与纯文本的数据

字符输入流 : Reader 用于读取字符流的抽象类

public class FileReader extends InputStreamReader用来读取字符文件的便捷类。
 read()..+close();

字符输出流 : Writer

FileWriter 写出到文件的字符输出流

write()..+flush()+close()

注意:字符编码格式要求统一

字符流的文件拷贝

举例:

//1.选择流
new
new
//2.读入 写出
char[] car = new char[1024];
int
while((len=read.read(car))!=-1){
 write.write(car,0,len);
 }
//3.刷出
 write.flush();
//4.结束 后入的先出
 write.close();
 read.close();

缓冲流

功能:提高性能 用法: 缓冲流(节点流)

字节缓冲流

BufferedInputStream

BufferedOutputStream

没有新增方法,可以多态调用

字符缓冲流

举例:

//1.选择流
 InputStream is=null;
 OutputStream os=null;
 try {
 is=new BufferedInputStream(new FileInputStream("D:/hehe.txt"));
 os=new BufferedOutputStream(new FileOutputStream("D:/H.txt"));
//2.读入写出
 byte[] car=new byte[1024];
 int len=-1;
 while((len=is.read(car))!=-1){
 os.write(car, 0, len);
 }
 //3.刷出
 os.flush();
 } catch (FileNotFoundException e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
 } catch (IOException e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
 } finally{
 try {
 if(os!=null){
 os.close();
 }
 if(is!=null){
 is.close();
 }
 } catch (IOException e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
 }
 }

字符缓冲流

BufferedReader

BufferedWriter

新增方法:

readLine() newLine()

不能多态使用

举例:

//1.选择流
 BufferedReader is=null;
 BufferedWriter os=null;
 try {
 is=new BufferedReader(new FileReader("D:/hehe.txt"));
 os=new BufferedWriter(new FileWriter("D:/B.txt"));
 //2.读入写出
 //新增方法,每次读取一行
 String str=null;
 while((str=is.readLine())!=null){
 os.write(str);
 os.newLine();
 }
 //3.刷出
 os.flush();
 } catch (FileNotFoundException e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
 } catch (IOException e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
 } finally{
 try {
 if(os!=null){
 os.close();
 }
 if(is!=null){
 is.close();
 }
 } catch (IOException e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
 }
 }

转换流

字节流-->字符流

InputStreamReader

OutputStreamWriter

举例:

(核心内容)

//1.选择流
 BufferedReader rs= new BufferedReader(new InputStreamReader(new BufferedInputStream(new FileInputStream("D:/hehe.txt"))));
 BufferedWriter rw=new BufferedWriter(new OutputStreamWriter(new BufferedOutputStream(new FileOutputStream("D:/D.txt"))));

基本数据类型流

基本数据类型流: 基本数据类型+字符串类型的数据

是字节流的一个功能流

DataInputStream:

DataOutputStream:

新增方法 readXxx() WriteXxx()

先写出-->再读入 (读入源文件才有效)

EOFException:文件有,但是内容读取不到

(需要先写出 再读入 才行)


对象流

对象流: 功能流(节点流) : 节本数据类型+字符串+对象类型

序列化:把对象类型数据的状态转为可以存储或者传输的过程

序列化输出流 ObjectOutputStream

反序列化输入流 ObjectInputStream

新增方法: writeObject() readObject()

基本规则:

先序列化后反序列化 实现空接口 java.io.Serializable

不是所有类都能序列化

不是所有的属性都需要序列化 transient

静态的内容不能被序列化

如果父类实现了序列化,子类对象的所有内容都可以被序列化

如果子类实现序列化,父类没有实现,子类对象只能序列化子类中的内容


容器

容器 和 数组的区别:

数组: 存储多个数据

特点:

1.定长,长度一旦确定不可改变

2.数据类型一致

3.索引,有序

自定义容器类:

只能存储字符串类型的数据,容器的大小可以随着数据的多少动态改变

(基本功能)

Container c=new Container();
//添加功能
 c.add("蜡笔小新");
//获取方法
 System.out.println(c.get(0));
 //删除
 c.romove(1);
 System.out.println(c.get(0));

Collection 容器体系父接口 定义容器的一些规则

根据动态根据数据的大小改变容量

只能存储引用类型的数据,基本数据类型-->自动装箱

可以存储任意类型的数据

(基本功能)

//容器对象
 Collection con=new ArrayList();
 Collection con2=new ArrayList();
 //1.add
 con.add(1);
 con.add("啊哈哈");
 System.out.println(con);
 //addAll()
 con.addAll(con2);
 System.out.println(con);
 //2.clear() 清除全部
 //con.clear();
 //3.contains() 判断是否包含
 System.out.println(con.contains("啊哈哈"));
 //4.equals() 
 System.out.println(con.equals(con2));
 //5.求交集
 con.retainAll(con2);
 System.out.println(con);
 System.out.println(con.size());
 //6.toArray
 System.out.println(Arrays.toString(con.toArray()));

Collection 容器的遍历

1.for..each

2.迭代器

//容器对象
 //泛型 : 增强容器的稳定性和可读性
 //规范容器中所有数据的数据类型
Collection<String> con=new ArrayList();
 con.add("哈哈");
 con.add("呵呵");
//1增强for
 for(String o:con){
 System.out.println(o);
 }
//2.迭代器 Iterator<E> iterator() 
 //1)获取迭代器对象 
 Iterator<String> it=con.iterator();
 //2)循环判断是否存在下一个元素
 while(it.hasNext()){
 //3)如果存在,就获取
 System.out.println(it.next());}

List 接口

有序可重复的

新增了一些根据索引操作的功能

List<Integer> list=new ArrayList();
 list.add(3);
 list.add(0);
 //指定索引位置添加数据
 list.add(2, 4);
 //get(index)
 System.out.println(list.get(1));
 System.out.println(list);
 //indexOf lastIndexOf
 System.out.println(list.indexOf(1));
 System.out.println(list.lastIndexOf(1));
 //remove(index)
 System.out.println(list.remove(3)); //如果出现数据和索引相同情况,优先索引
 System.out.println(list);
 //set(int index, E element) 
 System.out.println(list.set(3, 333));
 System.out.println(list);
 //subList 结束索引获取不到
 System.out.println(list.subList(1, 3));

List 接口

遍历方式:

1.增强for

2.迭代器

3.普通for