《张三记录-java》IO流

File与IO流

一.Filie类

1.简介

java.io.File 类 表示磁盘上的文件和目录(文件夹)

  • 无论是文件还是目录 File来表示
  • File类提供了对文件和目录的基本操作,查询文件名,文件大小, 新建,删除
  • File类不能操作文件的内容,如果要访问文件中的具体内容,需要用输入输出流

2.构造方法

路径分类

  • 绝对路径

    以根开始的路径

    windows : 盘符 如: D:\xx\xx\xx.txt

    Linux/Macos: / 正斜杠 /home/soft01/aa/a.txt

  • 相对路径

    相对于某个参照物的路径

构造方法含义
new File(String pathname)指定一个路径
new File(String parent, String child)指定一个父路径,一个子路径
new File(File parent,String child);指定一个父目录对象和子路径

3.常用方法

方法含义
getName()获取文件名称
getPath()获取路径
getAbsoultePath()获取绝对路径
length()获取文件大小
lastModified()获取最后修改的时间
exists()判断文件是否存在
isDirectory()判断是否是目录
isFile()判断是否是文件
getParent()获取父目录路径
getParentFile()获取父目录对象
isHidden()判断是否是隐藏文件
canRead()判断是否可读
canWrite()视频是否可写
方法含义
createNewFile()创建文件
delete()删除文件
mkdir()创建目录
mkdirs()级联创建目录
list()获取当前目录下的文件和目录 的名字
listFiles()获取当前目录下的File对象

二 IO流

1.简介

IO: input和 output 输入输出

流(Stream):可以理解为一组有顺序的有起点和终点的动态数据集合

  • 文件是数据在磁盘上静态的存储
  • 流就是数据在传输时动态的形式
  • 通过IO流对文件进行读写操作

2.文件的分类

  • 文本文件

    可直接编辑的文件:ppt txt .java

  • 二进制文件

    除了文本文件

3.流的分类

按照三种标准来分

  • 按照方向(站在java程序的角度)

    输入流: (从文件到程序) ,用来读取文件的数据

    输出流:(将程序到文件中),用来写出数据

  • 按照流的单位

    字节流:操作数据的单位为字节

    字符流:操作数据的单位为字符

  • 按照数据来源

    节点流:直接对数据源进行操作

    包装流:对节点流进行操作

IO流的四个父类/基类

字节流字符流
输入(input)字节输入流(InputStream)字符输入流(Reader)
输出(output)字节输出流(OutputStream)字符输出流(Writter)

三.字节流

1.简介

InputStream是字节输入流的父类,常用子类

  • FileInputStream
  • ByteArrayInputStream
  • ObjectInputStream

OutputStream是字节输出流的父类,常用子类

  • FileOutputStream
  • ByteArrayOutputStream
  • ObjectOutputStream

2.文件输入输出流

2.1FileInputStream

文件字节输入流: 以字节为单位,从文件中读取数据

方法含义
read()读取一个字节,返回int类型的字节值,读到末尾返回-1
close()关闭流
read(byte[] b)每次读取多个字节,将读取的数据保存在数组中,返回实际读取的个数

2.2FileOutputStream

文件字节输出流: 以字节为单位,将数据写出的文件中

3.对象输入输出流

将java中的对象写入和读取,用IO流来操作java中的对象,我们称为对象的序列化 和 反序列化

属于包装流

  • 不能直接操作数据源,而是对节点流进行操作
  • 创建包装流,需要将一个节点流传入,作为基础流

3.1序列化和反序列化

序列化:将对象 写入IO流中,实现将对象保存在磁盘上

反序列化:从磁盘中读取对象,将文件中的对象恢复到程序中

对象序列化和反序列化 时需要实现Serializable接口

3.2 ObjectInputStream

对象输入流: 用来读取对象,实现 反序列化

3.3ObjectOutputStream

对象输出流:用来写对象,实现 序列化

4.字节数组输入输出流

数据的来源或者目的地都不一定是文件,也可以是内存中的一块空间 : 如 一个字节数组

4.1ByteArrayInputStream

字节数组输入流:将字节数组中的数据读出来

4.2ByteArrayOutputStream

字节数组输出流:将数据写入一个字节数组中

四.字符流

1.简介

Reader 是字符输入流的父类

  • FileReader
  • BufferedReader
  • InputStreamReader

Writer 是字符输出流的父类

  • FileWriter
  • BufferedWriter
  • OutputStreamWriter

2.文件字符输入输出流

2.1 FileReader

以字符为单位,读取数据

2.2FileWriter

以字符为单位,写入数据

3.缓冲输入输出流

缓冲流属于包装流,为字符添加了缓冲的功能

当读取或写出数据时,在缓冲区进行读写,减少对磁盘的IO操作,提高效率

4.转换流

用于将字节流转为字符流,同时可以实现编码的转换

在转换时可以指定使用的字符集

在java中没有提供字符流转为字节流的方法

五.RandomAccessFile

1.简介

随机读写流,是一个字节流,可以对文件进行随机读写

  • 随机:可以定位到文件的任意位置进行读写,通过移动指针来实现
  • 读写: 读取文件,写入文件
public static void main(String[] args) {
		try(
				/**
				 * 如果文件不存在
				 * r: 会报错
				 * rw: 自动创建
				 */
				RandomAccessFile raf = new RandomAccessFile("b.txt", "rw")
				){
			   System.out.println(raf.getFilePointer());//当前指针的位置
			   raf.write("张三".getBytes());
			   raf.write("hello".getBytes());
			   System.out.println(raf.getFilePointer());//11
			   
			   raf.seek(6);//将指针移动到指定位置
			   byte[] b = new byte[2];
			   raf.read(b);
			   System.out.println(new String(b));
			   System.out.println(raf.getFilePointer());//8
			   
			   raf.skipBytes(3);//将指针跳过指定的字节数
			   System.out.println(raf.getFilePointer());
			    
		}catch (Exception e) {
			// TODO: handle exception
		}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值