文章目录
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)
绝对路径和相对路径
- 绝对路径:一个完整路径,以盘符开始的路径
- 相对路径:一个简化的路径,相对指的是相对于当前项目的根目录
【注意】
- 路径是不区分大小写
- 路径中的文件名称分隔符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 : 文件字节输入流 - 把硬盘中的数据读取到内存中使用
- 字节输入流的谁用步骤 :
- 创建FileInputStream对象 , 构造方法中绑定要读取的数据源
- 使用FileInputStream对象中的方法read , 读取文件
- 释放资源
字符输入流(Reader)
字符输入流的所有类的超类
- public void close() - 关闭此流并释放并释放资源
- public int read() - 从输入流读取一个字节
FileReader : 文件字符输入流
字符输出流(Writer)
字符输出流的所有类的超类
FileWriter : 文件字符输入流
- 字符输出流的使用步骤 :
- 创建FileWriter对象 , 构造方法中绑定要写入数据的目的地
- 使用FileWriter中的方法write , 把数据写入到内存缓冲区中(字符转换为字节的过程)
- 使用FileWriter中的方法flush , 把内存缓冲区中的数据 , 刷新到文件中
- 释放资源
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
- ObjectInputStream:对象的反序列化流