字符流
字符流: 只能操作与纯文本的数据
字符输入流 : 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