Java I/O 简单总结

179 阅读4分钟

Java IO 流总结

文件

File对象既可以表示文件,也可以表示目录

调用isFile(),判断该File对象是否是一个已存在的文件,调用isDirectory(),判断该File对象是否是一个已存在的目录

常用的文件操作

  • 创建文件对象相关的构造器和方法

    new File(String pathname)                //根据路径构建一个File对象
    new File(File parent, String child)      //根据父目录文件+子路径构建
    new File(String parent, String child)    //根据父目录+子路径构建
    
  • createNewFile 创建新文件

  • getName 获取文件名称

  • getAbsolutePath 获取绝对路径

  • getPath 获取相对路径

  • getParent 获取父目录

  • length 获取文件大小

  • exists 获取文件是否存在

  • isFile 获取是否是文件

  • isDirectory 获取是否是目录

  • 目录的操作已经文件删除

    mkdir 创建一级目录

    mkdirs 创建多级目录

    delete 删除空目录或者文件

RandomAccessFile

构造方法

RandomAccessFile raf = newRandomAccessFile(File file, String mode);

其中参数 mode 的值可选 "r":可读,"w" :可写,"rw":可读性;

成员方法

seek(int index);可以将指针移动到某个位置开始读写;

setLength(long len);给写入文件预留空间:

RandomAccessFile 特点和优势

  1. 既可以读又可以写。

    RandomAccessFile不属于InputStream和OutputStream类系的它是一个完全独立的类,所有方 法(绝大多数都只属于它自己)都是自己从头开始规定的,这里面包含读写两种操作

  2. 可以指定位置写。

    RandomAccessFile能在文件里面前后移动,在文件里移动用的seek( ),所以它的行为与其它的I/O类 有些根本性的不同。总而言之,它是一个直接继承Object的,独立的类。只有RandomAccessFile才有 seek搜寻方法,而这个方法也只适用于文件

IO

IO流原理

IO是指Input/Output,即输入和输出。以内存为中心:

  • Input指从外部读入数据到内存,例如,把文件从磁盘读取到内存,从网络读取数据到内存等等。
  • Output指把数据从内存输出到外部,例如,把数据从内存写入到文件,把数据从内存输出到网络等等。

为什么要把数据读到内存才能处理这些数据?因为代码是在内存中运行的,数据也必须读到内存,最终的表示方式无非是byte数组,字符串等,都必须存放在内存里。

从Java代码来看,输入实际上就是从外部,例如,硬盘上的某个文件,把内容读到内存,并且以Java提供的某种数据类型表示,例如,byte[]String,这样,后续代码才能处理这些数据。

因为内存有“易失性”的特点,所以必须把处理后的数据以某种方式输出,例如,写入到文件。Output实际上就是把Java表示的数据格式,例如,byte[]String等输出到某个地方。

IO流是一种顺序读写数据的模式,它的特点是单向流动。数据类似自来水一样在水管中流动,所以我们把它称为IO流。

IO流分类

  • 按操作数据单位的不同分为:字节流(8 bit)、字符流(按字符)。
  • 按数据的流向不同分为:输入流、输出流。
  • 按流的角色的不同分为:节点流、包装流。
抽象基类字节流字符流
输入流InputStreamReader
输出流OutputStreamWriter
  1. Java IO 流共有几十个,都是从这四个抽象基类派生的。
  2. 由这四个类派生的的子类的名称都是以其父类作为子类后缀名。

20210221114503973

装饰器模式

微信图片_20220520015756

Component:抽象构建接口

ConcreteComponent:具体的构建对象,实现组 件对象接口,通常就是被装饰的原始对象。就 对这个对象添加功能。

Decorator:所有装饰器的抽象父类,需要定义 一个与组件接口一致的接口,内部持有一个 Component对象,就是持有一个被装饰的对象。

ConreteDecoratorA/ConreteDecoratorB:实际 的装饰器对象,实现具体添加功能。

类比IO流中的装饰器模式

字节流

字符流