什么是流?
File类
-
文件
文件可认为是相关记录或放在一起的数据的集合
在JAVA中,使用java.io.File类对文件进行操作
字节流
2.字节输入流InputStream
2.1 FileInputStream
package com.imooc.file;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class FileDemo {
public static void main(String[] args) {
try {
FileInputStream fis=new FileInputStream("imooc.txt");
int n=0;
while((n=fis.read())!=-1) {//n为-1表示到达末尾
System.out.print((char)n);//int型转为char型
}
fis.close();//记得关闭输入流
} catch (FileNotFoundException e) {
e.printStackTrace();
}catch(IOException e) {
e.printStackTrace();
}
}
}
imooc.txt文件:
imooc
结果:
imooc
3.字节输出流OutputStream
3.1 FileOutputStream
package com.imooc.file;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileDemo {
public static void main(String[] args) {
FileOutputStream fos;
try {
fos = new FileOutputStream("imooc.txt",true);//true表示往txt文件里面追加数据
fos.write('b');
fos.write('a');
fos.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
结果:
输出前:
imooc2a
输出后:
imooc2aba
4.字节缓冲流
好处:使用缓冲流的读取或者写入操作效率更高
4.1 缓冲输入流BufferedInputStream
4.2 缓冲输出流BuffseredOutputStream
package com.imooc.file;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileDemo {
public static void main(String[] args) {
try {
FileOutputStream fos=new FileOutputStream("imooc.txt");
BufferedOutputStream bos=new BufferedOutputStream(fos);//将数据导入输出缓冲流
FileInputStream fis=new FileInputStream("imooc.txt");
BufferedInputStream bis=new BufferedInputStream(fis);//输入缓冲流
long startTime=System.currentTimeMillis();
bos.write(40);
bos.write('a');
bos.flush();//强制清空输出流(如果不清空输出流则无法直接输出到控制器上)
System.out.println(bis.read());
System.out.println((char)bis.read());
fos.close();
bos.close();
fis.close();
bis.close();//close同样有清空输出流的作用
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
imooc.txt:
(a
字符流
1.字符输入流Reader
1.1字节字符转换流
FileInputStream(字节读入)->InputStreamReader(将字节转换为字符)- >BufferedReader(将字符纳入字符缓存输入流)
FileOutputStream(字节读入)->OutputStreamWriter(将字节转换为字符)->BufferedWriter(将字符纳入字符缓存输入流)
前两者可以改为FileReader和FileWriter–不用字节转字符,直接进入缓冲区
2.字符输出流
对象序列化
序列化:
把java对象转换为字节序列的过程(将对象写进文件的过程–写)
反序列化:
将字节对象转换为java对象(将文件里面的数据变成对象的过程–读)
-
步骤
创建一个类,继承Serializable接口
创建对象
将对象写入文件
从文件读取对象信息 -
对象输入流ObjectInputStream
对象输出流ObjectOutputStream -
实例
定义一个goods类,继承Serializable接口
package com.imooc.serial;
import java.io.Serializable;
public class Goods implements Serializable{
private String goodsId;
private String goodsName;
private double price;
public Goods(String goodsId,String goodsName,double price){
this.goodsId=goodsId;
this.goodsName=goodsName;
this.price=price;
}
public String getGoodsId() {
return goodsId;
}
public void setGoodsId(String goodsId) {
this.goodsId = goodsId;
}
public String getGoodsName() {
return goodsName;
}
public void setGoodsName(String goodsName) {
this.goodsName = goodsName;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
@Override
public String toString() {
return "商品信息 [编号:" + goodsId + ", 名称:" + goodsName
+ ", 价格:" + price + "]";
}
}
将对象写入文件,并读取
```java
package com.imooc.serial;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
public class GoodsTest {
public static void main(String[] args) {
// 定义Goods类的对象
Goods goods1 = new Goods("gd001", "电脑", 3000);
try {
FileOutputStream fos = new FileOutputStream("imooc.txt");
ObjectOutputStream oos = new ObjectOutputStream(fos);
FileInputStream fis = new FileInputStream("imooc.txt");
ObjectInputStream ois = new ObjectInputStream(fis);
// 将Goods对象信息写入文件
oos.writeObject(goods1);//序列化
oos.flush();
// 读对象信息
try {
Goods goods = (Goods) ois.readObject();//反序列化
System.out.println(goods);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
fos.close();
oos.close();
fis.close();
ois.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
结果:
商品信息 [编号:gd001, 名称:电脑, 价格:3000]