话不多说 都在代码里
缓冲流:
import java.io.*;
public class buffered {
/*
* 首先练习的是缓冲流
* 可以用来加快数据的读取与书写速度
*字节缓冲流 BufferedInputStream, BufferedOutputStream
* 字符缓冲流BufferedReader BufferedWriter
*
*首先来看一下这个字节缓冲流 传统的读取只能一个字节一个字节的去读
* 如果遇到特别大的文件 就要去循环几百万几亿次 太慢了 没有效率
* 这时候就可以用字节缓冲流
*public BufferedInputStream(InputStream in)
* 创建一个 新的缓冲输入流。
* public BufferedOutputStream(OutputStream out) :
* 创建一个新的缓冲输出流。
*下面做个例子 首先准备一个测试文本 地址请自己设置
* */
public static void main(String[] args) throws IOException {
BufferedInputStream bs;
{
try {
//构造一个字节缓冲流
bs = new BufferedInputStream(new FileInputStream("C:\\Users\\Administrator\\Desktop\\a.txt"));
BufferedOutputStream bso=new BufferedOutputStream(new FileOutputStream("C:\\Users\\Administrator\\Desktop\\b.txt",true));
int i;
while ((i=bs.read())!=-1){
System.out.println(i);
bso.write(i);
}
//释放资源
bso.close();
bs.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
BufferedReader br=new BufferedReader(new FileReader("C:\\\\\\\\Users\\\\\\\\Administrator\\\\\\\\Desktop\\\\\\\\a.txt"));
BufferedWriter bw=new BufferedWriter(new FileWriter("C:\\\\Users\\\\Administrator\\\\Desktop\\\\d.txt"));
String len;
while ((len= br.readLine())!=null){
System.out.println(len);
bw.write(len);
}
bw.close();
br.close();
}
}
}
转换流:
import java.io.*;
public class zhuanhuan {
public static void main(String[] args) throws FileNotFoundException {
/*
* 转换流 字节与字符之间的桥梁
*
* Inputstreamreader
* outputStreamreader
* 主要是用于文件编码的转换 所以也叫转换流
* */
//文件地址
String url="C:\\Users\\Administrator\\Desktop\\a.txt";
String url1="C:\\Users\\Administrator\\Desktop\\z.txt";
try {
//转换流的使用一般设置utf-8
InputStreamReader ip=new InputStreamReader(new FileInputStream(url), "utf-8");
OutputStreamWriter ow=new OutputStreamWriter(new FileOutputStream(url1),"utf-8");
int ln;
while ((ln= ip.read())!=-1){
System.out.println((char)ln);
ow.write(ln);
}
//释放资源
ow.close();
ip.close();
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
序列化:
import java.io.*;
import java.util.ArrayList;
public class xuliehua {
public static void main(String[] args) throws IOException {
/*
* 序列化可以把一个Java对象写到文件内实现数据的持续存储
*首先必须创建一个可序列化的类 他的属性也是可序列化的(如果不想属性序列化 可以加上 transient)
* 实现SERIALIZABLE接口 表示接口可序列化
* 否则抛出异常
*下面是实例 前提是你已经创建好了一个Javabean对象
* */
String url="C:\\Users\\Administrator\\Desktop\\a.txt";
Student s=new Student("张三",18);
//上面是文件地址 可以自定义 以及创建好的Javabean
try {
ObjectOutputStream os=new ObjectOutputStream(new FileOutputStream(url));
//创建序列化流
os.writeObject(s);
os.close();
System.out.println("序列化完毕");
} catch (IOException e) {
throw new RuntimeException(e);
}
ObjectInputStream oi=new ObjectInputStream(new FileInputStream(url));
try {
//存入集合里面 这里是指定了个泛型student 以及做了个循环
//循环里面做了个强制转换
//最后输出
ArrayList a=new ArrayList<Student>();
a.add(oi.readObject());
for (int i = 0; i < a.size(); i++) {
Student l= (Student) a.get(i);
System.out.println(l.getName()+l.getAge());
}
} catch (IOException e) {
//捕获异常
throw new RuntimeException(e);
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}finally {
//一定要释放资源
oi.close();
}
}
}
序列化用到的Javabean
import java.io.Serializable;
public class Student implements Serializable {
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
private String name;
private int age;
}