缓冲流 基于内存的
缓冲字节流
- 缓冲字节输入流
public static void testBufferedInputStream() throws Exception {
//文件字节流输入对象
FileInputStream in=new FileInputStream("G:\\Users\\Administrator\\eclipse-workspace\\demo\\src\\day13\\tt.txt");
//把文件字节输入流 放入 缓冲流输入
BufferedInputStream br=new BufferedInputStream(in);
byte [] b=new byte[10];
int len =0;
while((len=br.read(b))!=-1) {
System.out.println(new String(b,0,len));
}
//关闭流顺序 最晚开的最早开
br.close();
in.close();
}
字节输出流
ublic static void testBufferedOutputStream() throws Exception {
//创建字节输出流对象
FileOutputStream out=new FileOutputStream("G:\\Users\\Administrator\\eclipse-workspace\\demo\\src\\day13\\tt1.txt");
//把字节输出流对象放到缓冲字节输出流
BufferedOutputStream bo=new BufferedOutputStream(out);
String s="杨金晓";
bo.write(s.getBytes());//写到内存里
bo.flush();//刷到硬盘上
bo.close();
out.close();
}
复制
public static void copyFile() {
try {
BufferedInputStream br=new BufferedInputStream(new FileInputStream("G:\\Users\\Administrator\\eclipse-workspace\\demo\\src\\day13\\tt1.txt")); //读取的源文件
BufferedOutputStream bo=new BufferedOutputStream(new FileOutputStream("G:\\Users\\Administrator\\eclipse-workspace\\demo\\src\\day13\\tt2.txt")); //要复制的目标地址
byte[] b=new byte[100];
int len=0;
while((len=br.read(b) ) !=-1) {
bo.write(b,0,len);//
}
bo.flush();
bo.close();
br.close();
} catch (Exception e) {
e.printStackTrace();
}
}
转换流把字节流转换为字符流
当字节流中的数据都是字符的时候,使用转换流转为字符流处理效率更高
//所有的文件都是由编码格式
//对我们来说,TxT和java文件一般来说有三种编码
//ISO8859-1西欧编码,纯粹的英文编码,不适用汉字
//GBK 和UTF-8,这两编码是适用于中文和英文
//我们一般使用UTF-8编码
/**
- 转换输入流
- 注意,在转换字符流时,设置的字符集编码要与读取的文件数据编码一致
- 不然出现乱码
- InputStreamReader
- @throws Exception
*/
public static void testInputStreamReader() throws Exception {
FileInputStream fs=new FileInputStream("G:\\Users\\Administrator\\eclipse-workspace\\demo\\src\\day13\\tt5.txt");
//把子节流转换为字符流
InputStreamReader in=new InputStreamReader(fs,"GBK");//fs字节流 GBK编码
// InputStreamReader in=new InputStreamReader(fs,"UTF-8");//fs字节流 UTF-8编码
char[] c=new char[100];
int len=0;
while((len=in.read(c)) !=-1) {
System.out.println(new String(c,0,len));
}
in.close();
fs.close();
}
}
标准输入流小练习
把控制台输入的内容写到指定的TXT文件中,当接收到字符串over时就结束程序的运行
public static void write2TXT() throws Exception {
//创建一个接受键盘输入数据的输入流
InputStreamReader is=new InputStreamReader (System.in);
//把输入流放进缓冲流
BufferedReader br=new BufferedReader(is);
BufferedWriter out=new BufferedWriter(new FileWriter("G:\\Users\\Administrator\\eclipse-workspace\\demo\\src\\day13\\tt7.txt"));
String line="";//定义一个临时接受数据的字符串
while((line=br.readLine())!=null) {
if(line.equals("over")) {
break;
}
//读取的内容写到指定的TXT文件tt7.txt中
out.write(line);
}
out.flush();
out.close();
br.close();
is.close();
}
对象流
*/
- 可以序列化与反序列化的对象
- @author Daybreak
*/
import java.io.Serializable;
public class Person implements Serializable {
/**
* 一个表示序列化版本标识符的静态变量
* 用来表明类的不同版本的兼容性
*/
private static final long serialVersionUID = 1L;
String name;
int age;
}
public class Test5 {
public static void main(String[] args) {
try {
Test5.testSerialize();
} catch (Exception e) {
e.printStackTrace();
}
对象序列化
public static void testSerialize() throws Exception {
//定义对象的输出流,把对象的序列化之后的流 放入指定文件夹中
ObjectOutputStream out=new ObjectOutputStream(new FileOutputStream("G:\\Users\\Administrator\\eclipse-workspace\\demo\\src\\day13\\tt9.txt"));
Person p=new Person();
p.name ="zz";
p.age=12;
out.writeObject(p);
out.flush();
out.close();
}
}
RandomAccessFile类
随机访问 ,程序可以直接跳到文件对的任意地方来读 写文件
/**
- 文件的随机读写
- 程序可以直接跳到文件的任意地方来读 写文件
- @author Daybreak
*/
随机读文件
public static void testRandomAccessFileRead() throws Exception {
RandomAccessFile ra=new RandomAccessFile("G:\\Users\\Administrator\\eclipse-workspace\\demo\\src\\day13\\tt.txt","rw");//两个参数,路径,访问模式(r制度,rw读取 写入)
ra.seek(0);//设置读取文件起始点
byte [] b=new byte[1024];
int len=0;
while((len=ra.read(b)) !=-1) {
System.out.println(new String(b,0,len));
}
ra.close();
}
总结