I / O

File类

File类是java.io包中很重要的一个类;

File类的对象可以表示文件,还可以表示目录,在程序中一个File类对象可以代表一个文件或目录;

File对象可以对文件或目录的属性进行操作,如:文件名、最后修改日期、文件大小等;

File对象无法操作文件的具体数据,即不能直接对文件进行读/写操作。

方 法 原 型说 明
File(String pathname)指定文件(或目录)名和路径创建文件对象
**File(String parent, String child) **根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。
File(File parent, String child)根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。
File(URL url)通过将给定的 file: URI 转换为一个抽象路径名来创建一个新的 File 实例。
方法摘要
booleancanExecute() 测试应用程序是否可以执行此抽象路径名表示的文件。
booleancanRead() 测试应用程序是否可以读取此抽象路径名表示的文件。
booleancanWrite() 测试应用程序是否可以修改此抽象路径名表示的文件。
intcompareTo(File pathname) 按字母顺序比较两个抽象路径名。
booleancreateNewFile() 当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件。
static FilecreateTempFile(String prefix, String suffix) 在默认临时文件目录中创建一个空文件,使用给定前缀和后缀生成其名称。
static FilecreateTempFile(String prefix, String suffix, File directory) 在指定目录中创建一个新的空文件,使用给定的前缀和后缀字符串生成其名称。
booleandelete() 删除此抽象路径名表示的文件或目录。
voiddeleteOnExit() 在虚拟机终止时,请求删除此抽象路径名表示的文件或目录。
booleanequals(Object obj) 测试此抽象路径名与给定对象是否相等。
booleanexists*() 测试此抽象路径名表示的文件或目录是否存在。
FilegetAbsoluteFile() 返回此抽象路径名的绝对路径名形式。
StringgetAbsolutePath() 返回此抽象路径名的绝对路径名字符串。
FilegetCanonicalFile() 返回此抽象路径名的规范形式。
StringgetCanonicalPath() 返回此抽象路径名的规范路径名字符串。
longgetFreeSpace() 返回此抽象路径名指定的分区中未分配的字节数。
StringgetName() 返回由此抽象路径名表示的文件或目录的名称。
StringgetParent() 返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回 null
FilegetParentFile() 返回此抽象路径名父目录的抽象路径名;如果此路径名没有指定父目录,则返回 null
StringgetPath() 将此抽象路径名转换为一个路径名字符串。
longgetTotalSpace() 返回此抽象路径名指定的分区大小。
longgetUsableSpace() 返回此抽象路径名指定的分区上可用于此虚拟机的字节数。
inthashCode() 计算此抽象路径名的哈希码。
booleanisAbsolute() 测试此抽象路径名是否为绝对路径名。
booleanisDirectory() 测试此抽象路径名表示的文件是否是一个目录。
booleanisFile() 测试此抽象路径名表示的文件是否是一个标准文件。
booleanisHidden() 测试此抽象路径名指定的文件是否是一个隐藏文件。
longlastModified() 返回此抽象路径名表示的文件最后一次被修改的时间。
longlength() 返回由此抽象路径名表示的文件的长度。
String[]list() 返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。
String[]list(FilenameFilter filter) 返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中满足指定过滤器的文件和目录。
File[]listFiles() 返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。
File[]listFiles(FileFilter filter) 返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。
File[]listFiles(FilenameFilter filter) 返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。
static File[]listRoots() 列出可用的文件系统根。
booleanmkdir() 创建此抽象路径名指定的目录。
booleanmkdirs() 创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。
booleanrenameTo(File dest) 重新命名此抽象路径名表示的文件。
booleansetExecutable(boolean executable) 设置此抽象路径名所有者执行权限的一个便捷方法。
booleansetExecutable(boolean executable, boolean ownerOnly) 设置此抽象路径名的所有者或所有用户的执行权限。
booleansetLastModified(long time) 设置此抽象路径名指定的文件或目录的最后一次修改时间。
booleansetReadable(boolean readable) 设置此抽象路径名所有者读权限的一个便捷方法。
booleansetReadable(boolean readable, boolean ownerOnly) 设置此抽象路径名的所有者或所有用户的读权限。
booleansetReadOnly() 标记此抽象路径名指定的文件或目录,从而只能对其进行读操作。
booleansetWritable(boolean writable) 设置此抽象路径名所有者写权限的一个便捷方法。
booleansetWritable(boolean writable, boolean ownerOnly) 设置此抽象路径名的所有者或所有用户的写权限。
StringtoString() 返回此抽象路径名的路径名字符串。
URLtoURI() 构造一个表示此抽象路径名的 file: URI。
URLtoURL() 已过时。 此方法不会自动转义 URL 中的非法字符。建议新的代码使用以下方式将抽象路径名转换为 URL:首先通过 toURI 方法将其转换为 URI,然后通过 URI.toURL 方法将 URI 装换为 URL。

输入及输出的概念

输入输出(I/O)

把电脑硬盘上的数据读到程序中,称为输入,即input,进行数据的read操作

从程序往外部设备写数据,称为输出,即output,进行数据的write操作

在这里插入图片描述

输入流与输出流

流按着数据的传输方向分为:

​ 输入流:往程序中读叫输入流。

​ 输出流:从程序中往外写叫输出流。

所有输入流都是InputStream类或者Reader类的子类。

​ 类名以InputStream结尾的类都是InputStream的子类。

​ 类名以Reader结尾的类都是Reader类的子类。

所有输出流都是OutputStream类或者Writer类的子类。

​ 类名以OutputStream结尾的类都是OutputStream的子类。

​ 类名以Writer结尾的类都是Writer类的子类。

字节流与字符流

从数据流编码格式上划分为

​ 字节流

​ 字符流

InputStream和OutputStream的子类都是字节流

​ 可以读写二进制文件,主要处理音频、图片、歌曲、字节流,处理单元为1个字节。

Reader和Writer的子类都是字符流

​ 主要处理字符或字符串,字符流处理单元为2个字节。

​ 字节流将读取到的字节数据,去指定的编码表中获取对应文字。

字节流中常用类

​ 字节输入流 FileInputStream

​ 字节输出流 FileOutputStream

字符流中常用类

​ 字符输入流 FileReader

​ 字符输出流 FileWriter

InputStream的基本方法

读取一个字节并以整数的形式返回(0~255),如果返回-1已到输入流的末尾。

​ int read() throws IOException

读取一系列字节并存储到一个数组buffer,

返回实际读取的字节数,如果读取前已到输入流的末尾返回-1

​ int read(byte[] buffer) throws IOException

关闭流释放内存资源

​ void close() throws IOException

OutputStream的基本方法

向输出流中写入一个字节数据,该字节数据为参数b的低8位

​ void write(int b) throws IOException

将一个字节类型的数组中的从指定位置(off)开始的

len个字节写入到输出流

​ void write(byte[] b, int off, int len) throws IOException

关闭流释放内存资源

​ void close() throws IOException

节点流与处理流

根据封装类型不同流又分为

​ 节点流

​ 处理流

节点流:

​ 如果流封装的是某种特定的数据源,如文件、字符串、字符串数组等,则称为节点流。

处理流。

​ 如果流封装的是其它流对象,称为处理流。

​ 处理流提供了缓冲功能,提高读写效率,同时增加了一些新的方法。

节点流中常用类

​ 字节输入流 FileInputStream

​ 字节输出流 FileOutputStream

​ 字符输入流 FileReader

​ 字符输出流 FileWriter

处理流中常用类

​ 缓冲字节输出流 BufferedOutputStream

​ 缓冲字节输入流 BufferedInputStream

​ 缓冲字符输入流 BufferedReader

​ 缓冲字符输出流 BufferedWriter

输入输出节点字符流

Reader 的基本方法

读取一个字符并以整数的形式返回,

如果返回-1已到输入流的末尾。

​ int read() throws IOException

读取一系列字符并存储到一个数组buffer,

返回实际读取的字符数,如果读取前已到输入流的末尾返回-1

​ int read(char[] cbuf) throws IOException

关闭

​ void close() throws IOException

Writer 的基本方法

向输出流中写入一个字符数据,该字节数据为参数b的16位

​ void write(int c) throws IOException

一个字符类型的数组中的数据写入输出流,

​ void write(char[] cbuf) throws IOException

将一个字符类型的数组中的从指定位置(offset)开始的

length个字符写入到输出流

​ void write(char[] cbuf, int offset, int length) throws IOException

关闭

​ void close() throws IOException

Print流

Print 打印流:只做输出没有输入

打印流分为字节打印流和字符打印流

PrintWriter:字符打印流

print方法可以打印各种类型数据

构造方法摘要
**PrintWriter**(File file) 使用指定文件创建不具有自动行刷新的新 PrintWriter。
**PrintWriter**(File file, String csn) 创建具有指定文件和字符集且不带自动刷行新的新 PrintWriter。
**PrintWriter**(OutputStream out) 根据现有的 OutputStream 创建不带自动行刷新的新 PrintWriter。
**PrintWriter**(OutputStream out, boolean autoFlush) 通过现有的 OutputStream 创建新的 PrintWriter。
**PrintWriter**(String fileName) 创建具有指定文件名称且不带自动行刷新的新 PrintWriter。
**PrintWriter**(String fileName, String csn) 创建具有指定文件名称和字符集且不带自动行刷新的新 PrintWriter。
**PrintWriter**(Writer out) 创建不带自动行刷新的新 PrintWriter。
**PrintWriter**(Writer out, boolean autoFlush) 创建新 PrintWriter。
方法摘要
PrintWriter**append**(char c) 将指定字符添加到此 writer。
PrintWriter**append**(CharSequence csq) 将指定的字符序列添加到此 writer。
PrintWriter**append**(CharSequence csq, int start, int end) 将指定字符序列的子序列添加到此 writer。
boolean**checkError**() 如果流没有关闭,则刷新流且检查其错误状态。
protected void**clearError**() 清除此流的错误状态。
void**close**() 关闭该流并释放与之关联的所有系统资源。
void**flush**() 刷新该流的缓冲。
PrintWriter**format**(Locale l, String format, Object... args) 使用指定格式字符串和参数将一个格式化字符串写入此 writer 中。
PrintWriter**format**(String format, Object... args) 使用指定格式字符串和参数将一个格式化字符串写入此 writer 中。
void**print**(boolean b) 打印 boolean 值。
void**print**(char c) 打印字符。
void**print**(char[] s) 打印字符数组。
void**print**(double d) 打印 double 精度浮点数。
void**print**(float f) 打印一个浮点数。
void**print**(int i) 打印整数。
void**print**(long l) 打印 long 整数。
void**print**(Object obj) 打印对象。
void**print**(String s) 打印字符串。
PrintWriter**printf**(Locale l, String format, Object... args) 使用指定格式字符串和参数将格式化的字符串写入此 writer 的便捷方法。
PrintWriter**printf**(String format, Object... args) 使用指定格式字符串和参数将格式化的字符串写入此 writer 的便捷方法。
void**println**() 通过写入行分隔符字符串终止当前行。
void**println**(boolean x) 打印 boolean 值,然后终止该行。
void**println**(char x) 打印字符,然后终止该行。
void**println**(char[] x) 打印字符数组,然后终止该行。
void**println**(double x) 打印双精度浮点数,然后终止该行。
void**println**(float x) 打印浮点数,然后终止该行。
void**println**(int x) 打印整数,然后终止该行。
void**println**(long x) 打印 long 整数,然后终止该行。
void**println**(Object x) 打印 Object,然后终止该行。
void**println**(String x) 打印 String,然后终止该行。
protected void**setError**() 指示已发生错误。
void**write**(char[] buf) 写入字符数组。
void**write**(char[] buf, int off, int len) 写入字符数组的某一部分。
void**write**(int c) 写入单个字符。
void**write**(String s) 写入字符串。
void**write**(String s, int off, int len) 写入字符串的某一部分。

对象输入输出流

对象的输入输出流 : 主要的作用是用于写入对象信息与读取对象信息。 对象信息一旦写到文件上那么对象的信息就可以做到持久化了
  对象的输出流: ObjectOutputStream
  对象的输入流: ObjectInputStream

方法摘要
protected void**annotateClass**(Class<?> cl) 子类可以实现此方法,从而允许在流中存储类数据。
protected void**annotateProxyClass**(Class<?> cl) 子类可以实现此方法,从而在流中存储定制数据和动态代理类的描述符。
void**close**() 关闭流。
void**defaultWriteObject**() 将当前类的非静态和非瞬态字段写入此流。
protected void**drain**() 排空 ObjectOutputStream 中的所有已缓冲数据。
protected boolean**enableReplaceObject**(boolean enable) 允许流对流中的对象进行替换。
void**flush**() 刷新该流的缓冲。
ObjectOutputStream.PutField**putFields**() 获取用于缓冲写入流中的持久存储字段的对象。
protected Object**replaceObject**(Object obj) 在序列化期间,此方法允许 ObjectOutputStream 的受信任子类使用一个对象替代另一个对象。
void**reset**() 重置将丢弃已写入流中的所有对象的状态。
void**useProtocolVersion**(int version) 指定要在写入流时使用的流协议版本。
void**write**(byte[] buf) 写入一个 byte 数组。
void**write**(byte[] buf, int off, int len) 写入字节的子数组。
void**write**(int val) 写入一个字节。
void**writeBoolean**(boolean val) 写入一个 boolean 值。
void**writeByte**(int val) 写入一个 8 位字节。
void**writeBytes**(String str) 以字节序列形式写入一个 String。
void**writeChar**(int val) 写入一个 16 位的 char 值。
void**writeChars**(String str) 以 char 序列形式写入一个 String。
protected void**writeClassDescriptor**(ObjectStreamClass desc) 将指定的类描述符写入 ObjectOutputStream。
void**writeDouble**(double val) 写入一个 64 位的 double 值。
void**writeFields**() 将已缓冲的字段写入流中。
void**writeFloat**(float val) 写入一个 32 位的 float 值。
void**writeInt**(int val) 写入一个 32 位的 int 值。
void**writeLong**(long val) 写入一个 64 位的 long 值。
void**writeObject**(Object obj) 将指定的对象写入 ObjectOutputStream。
protected void**writeObjectOverride**(Object obj) 子类用于重写默认 writeObject 方法的方法。
void**writeShort**(int val) 写入一个 16 位的 short 值。
protected void**writeStreamHeader**() 提供 writeStreamHeader 方法,这样子类可以将其自身的头部添加或预加到流中。
void**writeUnshared**(Object obj) 将“未共享”对象写入 ObjectOutputStream。
void**writeUTF**(String str)UTF-8 修改版格式写入此 String 的基本数据。
方法摘要
int**available**() 返回可以不受阻塞地读取的字节数。
void**close**() 关闭输入流。
void**defaultReadObject**() 从此流读取当前类的非静态和非瞬态字段。
protected boolean**enableResolveObject**(boolean enable) 使流允许从该流读取的对象被替代。
int**read**() 读取数据字节。
int**read**(byte[] buf, int off, int len) 读入 byte 数组。
boolean**readBoolean**() 读取一个 boolean 值。
byte**readByte**() 读取一个 8 位的字节。
char**readChar**() 读取一个 16 位的 char 值。
protected ObjectStreamClass**readClassDescriptor**() 从序列化流读取类描述符。
double**readDouble**() 读取一个 64 位的 double 值。
ObjectInputStream.GetField**readFields**() 按名称从流中读取持久字段并使其可用。
float**readFloat**() 读取一个 32 位的 float 值。
void**readFully**(byte[] buf) 读取字节,同时阻塞直至读取所有字节。
void**readFully**(byte[] buf, int off, int len) 读取字节,同时阻塞直至读取所有字节。
int**readInt**() 读取一个 32 位的 int 值。
String**readLine**() 已过时。 此方法不能正确地将字节转换为字符。请参见 DataInputStream 以获取详细信息和替代方法。
long**readLong**() 读取一个 64 位的 long 值。
Object**readObject**() 从 ObjectInputStream 读取对象。
protected Object**readObjectOverride**() 此方法由 ObjectOutputStream 的受信任子类调用,这些子类使用受保护的无参数构造方法构造 ObjectOutputStream。
short**readShort**() 读取一个 16 位的 short 值。
protected void**readStreamHeader**() 提供的 readStreamHeader 方法允许子类读取并验证它们自己的流头部。
Object**readUnshared**() 从 ObjectInputStream 读取“非共享”对象。
int**readUnsignedByte**() 读取一个无符号的 8 位字节。
int**readUnsignedShort**() 读取一个无符号的 16 位 short 值。
String**readUTF**() 读取 UTF-8 修改版格式的 String。
void**registerValidation**(ObjectInputValidation obj, int prio) 在返回图形前注册要验证的对象。
protected Class<?>**resolveClass**(ObjectStreamClass desc) 加载指定流类描述的本地等价类。
protected Object**resolveObject**(Object obj) 在反序列化期间,此方法允许 ObjectInputStream 的受信任子类使用一个对象替代另一个。
protected Class<?>**resolveProxyClass**(String[] interfaces) 返回一个代理类,该类实现在代理类描述符中命名的接口;子类可以实现此方法,以便从流及动态代理类的描述符中读取自定义数据,允许它们使用接口和代理类的替换加载机制。
int**skipBytes**(int len) 跳过字节。

要将序列化之后的对象保存下来,需要通过对象输出流(ObjectOutputStream)将对象状态保存,之后再通过对象输入流(ObjectInputStream)将对象状态恢复。

在ObjectInputStream 中用readObject()方法可以直接读取一个对象,

ObjectOutputStream中用writeObject()方法可以直接将对象保存到输出流中。

对象序列化

对象的寿命通常随着生成该对象的程序的终止而终止。

​ 有时候,可能需要将对象的状态保存下来,在需要时再将对象恢复。

对象的输出流将指定的对象写入到文件的过程,就是将对象序列化的过程,对象的输入流将指定序列化好的文件读出来的过程,就是对象反序列化的过程。既然对象的输出流将对象写入到文件中称之为对象的序列化,所以必须要实现Serializable接口。

​ Serializable接口中没有任何方法。当一个类声明实现Serializable接口后,表明该类可被序列化。

​ 在类中可以生成一个编号

​ private static final long serialVersionUID = -5974713180104013488L*;* 随机生成 唯一的

​ serialVersionUID 用来表明实现序列化类的不同版本间的兼容性。某个类在与之对应的对象已经序列化出去后做了修改,该对象依然可以被正确反序列化

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值