Java-I/O

File类

File类是java.io包下代表与平台无关的文件和目录,也就是说,如果希望在程序中操作文件和目录,都可以通过File类来完成。File能新建、删除、重命名文件和目录,File不能访问文件本身,如果需要访问文件内容本身,则需要使用输入/输出流。

File类中的静态成员变量
  • static String pathSeparate - 与系统有关的路径分隔符,表示为一个字符串。windows:分号,linux:冒号
  • static char pathSeparatorChar - 与系统有关的路径分隔符
  • static String separator - 与系统有关的默认名称分隔符。windows:反斜杠 \ ,linux:正斜杠 /
  • static char separatorChar - 与系统有关的默认名称分隔符。

操作路径时,路径不要写死

File类中的构造方法
  • File(String pathName) - 通过给定路径名字符串转换为抽象路径名来创建一个新File实例
  • File(String parent , String child) - 根据parebt路径名字符串和child路径名字符串创建一个File实例
  • File(File parent , String child)
绝对路径和相对路径
  • 绝对路径:一个完整路径,以盘符开始的路径
  • 相对路径:一个简化的路径,相对指的是相对于当前项目的根目录

【注意】

  1. 路径是不区分大小写
  2. 路径中的文件名称分隔符windows使用反斜杠,反斜杠是转义字符,两个反斜杠代表一个普通的反斜杠

字节流和字符流

Java中的I/O流是实现输入/输出的基础,可以方便地实现数据的输入/输出操作,在Java中把不同的输入/输出源抽象表述为“流”。

  • 输入流:把硬盘上的数据,读取到内存中使用
  • 输出流:把内存中的数据写入到硬盘中保存

Java的I/O流共涉及40多个类,都是由如下4个抽象基类派生的:

  • InputStream/Reader:所有输入流的基类,前者是字节处输入流,后者是字符输入流
  • OutputStream/Writer:所有输出流的基类,前者是字节输出流,后者是字节输入流

它们都是抽象基类 , 无法直接创建实例 , 需要创建子类.

字节输出流(OutputStream)

字节输出流的所有类的超类
有一些子类共性的方法:

  • public void close() - 关闭次输出流并释放与此流相关联的任何系统资源
  • public void flush() - 刷新此输出流并强制任何缓冲的输出字节被写出
  • public void write(byte[ ] b) - 将b.lenngth字节从指定的字节数组写入此输出流
  • public void write(byte[ ] b , int off , int len) - 从指定的字节数组写入len字节 , 从偏移量off开始输出到此输出流
  • public abstract void write(int b)

FileOutPutStream : 文件字节输出流 - 把内存中的数据写入到硬盘中

  • FileOutPutStream(String name) - 创建一个向具有指定名称的文件中写入数据的输出文件流
  • FileOutPutStream(File file) - 创建一个向指定File对象表示的文件中写入数据的文件输出流
字节输入流(InputStream)

字节输入流所有类的超类

  • public void close() - 关闭此输入流并释放资源
  • public abstract int read() - 从输入流读取数据的下一个字节
  • public int read(bytw[ ] b) - 从输入流中读取一些字节数,并将它们存储到字节数组b中

FileInputStream : 文件字节输入流 - 把硬盘中的数据读取到内存中使用

  • 字节输入流的谁用步骤 :
  1. 创建FileInputStream对象 , 构造方法中绑定要读取的数据源
  2. 使用FileInputStream对象中的方法read , 读取文件
  3. 释放资源
字符输入流(Reader)

字符输入流的所有类的超类

  • public void close() - 关闭此流并释放并释放资源
  • public int read() - 从输入流读取一个字节

FileReader : 文件字符输入流

字符输出流(Writer)

字符输出流的所有类的超类

FileWriter : 文件字符输入流

  • 字符输出流的使用步骤 :
  1. 创建FileWriter对象 , 构造方法中绑定要写入数据的目的地
  2. 使用FileWriter中的方法write , 把数据写入到内存缓冲区中(字符转换为字节的过程)
  3. 使用FileWriter中的方法flush , 把内存缓冲区中的数据 , 刷新到文件中
  4. 释放资源
flush和close的区别
  • flush : 刷新缓冲区 , 流对象可以继续使用
  • close : 先刷新缓冲区 , 然后通知系统释放资源 , 流对象不可以再被使用了

I/O流体系

缓冲流

缓冲流 , 也叫高效流 , 是对4个基本流的增强 , 也可分为字节缓冲流和字符缓冲流

  • 字节缓冲流 : BufferedInputStream , BufferedOutputStream
  • 字符缓冲流 : BufferedReader , BufferedWriter

缓冲流的基本原理 , 是在创建流对象时,会创建一个内置的默认大小的缓冲区数组 , 通过缓冲区读写 , 减少系统IO次数 , 从而提高读写效率

  • 构造方法(以字节缓冲流为例)
    • public BufferedInputStream(InputStream in) - 创建一个 新的缓冲输入流
    • public BufferedOutputStream(OutputStream in) - 创建一个新的缓冲输出流
转换流
  • InputStreamReader : 从字节流到字符流的桥梁。它读取字节,并使用指定的字符集将其解码为字符。
  • OutputStreamWriter : 从字符流到字节流的桥梁。使用指定的字符集讲字符编码为字节。
序列化

对象序列化是的目标是将对象保存到磁盘中 , 或允许在网络中直接传输对象。序列化机制允许将实现序列化的Java对象转换成字节序列,这些字节序列可以保存在磁盘上,或通过网络传输,已被以后重新恢复成原来的对象。序列化机制使得对象可以脱离程序的运行而独立存在。
如果需要让某个对象支持序列化机制,则必须让它的类是可序列化的,该类必须实现如下两个接口之一:

  • Serializable
  • Externalizable

Java的很多类已经实现了Serializable,该接口是一个标记接口,实现该接口无须实现任何方法,它只是表名该类的实例是可序列化的。

  • 把对象以流的方式,写入到文件中保存,称为写对象,也叫对象的序列化
    • ObjectOutputStream:对象的序列化流
  • 把文件中保存的对象,以流的方式读取出来,叫做读对象,也叫对象的反序列化
    • ObjectInputStream:对象的反序列化流
      0
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值