IO流

一、File-文件操作:

1.作用:File用于表示文件或目录,不能对文件的内容进行访问;

2.知识点结构图:


3.部分难点示例:

  a.listFiles()方法:

File dir = new File(".");
File[] subs = dir.listFiles();
for (File file : subs) {
	System.out.println(file.getName());
}
  b.FileFilter()方法:

File dir = new File(".");
File[] subs = dir.listFiles(new FileFilter() {
	@Override
	public boolean accept(File file) {
		return file.getName().endsWith(".txt");
	}
});
for (File file : subs) {
	System.out.println(file);
}

二、RandomAccessFile:

1.作用:Java提供了一个可以对文件随机访问的操作,包括读和写操作,该类名为RandomAccessFile。该类的读写是基于指针的操作;

2.知识点结构图:

三、基本IO操作:

1.总结分类:

  a.输入:读取数据;

  b.输出:写出数据;

  c.节点流(低级流):可以从或向一个特定的方向(节点)读写数据;

  d.处理流(高级流/过滤流):是对一个已存在的流的连接和封装,通过所封装的流的功能调用实现数据读写;

  e.InputStream:是所有字节输入流的父类,其定义了基本的读取read方法;

  f.OutputStream:是所有字节输出流的父类,其定义了基本的写出write方法;

  g.处理流的构造方法总是要带一个其他的流对象做参数。一个流对象经过其他流的多次包装,称为流的链接;

2.文件流:

  a.FileOutputStream:是文件的字节输出流,使用该流可以以字节为单位将数据写入文件;

  b.FileInputStream:是文件的字节输入流,使用该流可以以字节为单位从文件中读取数据;

  c.默认情况下,FOS写入操作会将文件中原有数据全部清除;

  d.实现文件的复制操作案例:

FileInputStream fis = new FileInputStream("yx.txt");
FileOutputStream fos = new FileOutputStream("yx_copy.txt");
		
int len = -1;
byte[] buf = new byte[32];
while((len = fis.read(buf))!=-1) {
	fos.write(buf, 0, len);
}
fis.close();
fos.close();

3.缓冲流:

  a.BufferedOutputStream:缓冲输出流内部维护一个缓冲区,当缓冲区满时,一次性全部写出;

  b.BufferedInputStream:是缓冲字节输入流,内部维护一个缓冲区(字节数组);

  c.void flush():清空缓冲区,将缓冲区中的数据强制写出;

  d.实现基于缓存区的文件复制案例:

FileInputStream fis = new FileInputStream("fos.dat");
BufferedInputStream bis = new BufferedInputStream(fis);
		
FileOutputStream fos = new FileOutputStream("fos_copy.dat");
BufferedOutputStream bos = new BufferedOutputStream(fos);
		
int d = -1;
while((d = bis.read())!= -1) {
	bos.write(d);
}
System.out.println("复制完毕");
bis.close();
bos.close();
4.对象流:

  a.对象序列化概念:有时要把对象保存在硬盘上,又有时我们需要将对象传输到另一台计算机上等等这样的操作;

  b.ObjectOutputStream:是用来对对像进行序列化的输出流;

  c.实现对象序列化的方法为:void writeObject(Object obj)。该方法可以将给定的对象转换为一个字节序列后写出;

  d.ObjectInputStream:是用来对对象进行反序列化的输入流;

  e.实现对象反序列化的方法为:Object readObject()。该方法可以从流中读取字节并转换为对应的对象;

  f.Serializable接口:实现该接口不需要重写任何方法。其只是作为可序列化的标志;

  g.serialVersionUID:通常实现该接口的类需要提供一个常量serialVersionUID,表明该类版本;

  h.transient关键字:有时在对一个对象进行序列化时可以忽略某些不必要的属性,从而对序列化后得到的字节序列“瘦身”。被修饰的属性在序列化时其值被忽略;

补充:

  a.序列化流程图:


  b.案例实现序列化:

FileOutputStream fos = new FileOutputStream("emp.obj");
ObjectOutputStream oos = new ObjectOutputStream(fos);
Emp emp = new Emp("张山", 18, "男", 3000);
oos.writeObject(emp);
System.out.println("序列化完成");
oos.close();

  c.案例实现反序列化:

FileInputStream fis = new FileInputStream("emp.obj");
ObjectInputStream ois = new ObjectInputStream(fis);
		
Emp emp = (Emp) ois.readObject();
System.out.println("反序列化完成");
System.out.println(emp);
ois.close();
5.基本IO操作知识结构图:



  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值