文件与流
一、File类
Java类库中的File类可以对文件系统中的文件和目录进行操作,它属于java.io这个包。一个File对象可以代表一个文件,也可以代表一个目录。创建了一个File对象后,如果是目录,可以显示目录清单,新建或删除目录;如果是文件,可以查询文件的属性和路径信息,也可以输出和改名,但没有拷贝功能。拷贝属于文件的读写,要用I/O流类来解决。 File类能够解决文件管理的所有问题,下面就来介绍一下这个类。
File类的数据成员主要有下列4个,它们都是类变量:
static String pathSeparator ";" 路径分隔符
static Char pathSeparatorChar ';' 路径分隔符,字符分号而不是字符串
static String separator "\" 路径表达式中的分隔符,如WINDOWS系统中是反斜杠
static Char separatorChar ‘\’ 字符型的路径表达式中的分隔符(反斜杠)
(1)File类的构造方法
public java.io.File(String pathName)
public java.io.File(String parent,String fileName)
public java.io.File(File parent,String fileName)
第一个构造方法通过全路径文件名来创建对象,pathName可以是绝对路径也可以是相对的。
第二个构造方法通过父目录和文件名来创建对象,fileName是不含路径的文件名。
第三个构造方法也是通过父目录和文件名来创建对象,但父目录由一个File对象提供。
(2)File类中的常用方法
方法 |
含义 |
boolean createNewFile() |
当且仅当不存在具有此抽象路径名指定的名称的文件时,创建由此抽象路径名指定的一个新的空文件。 |
static File createTempFile(String prefix,String suffix) |
在默认临时文件目录中创建一个空文件,使用给定前缀和后缀生成其名称 |
static File createTempFile(String prefix,Stirng suffix,File directory) |
在指定目录中创建一个新的空文件,使用给定的前缀和后缀字符串生成其名称 |
boolean exists() |
测试此抽象路径名表示的文件或目录是否存在 |
boolean delete() |
删除此抽象路径名表示的文件或目录 |
boolean equals(Object obj) |
测试此抽象路径名与给定对象是否相等 |
boolean canRead() |
测试应用程序是否可以读取此抽象路径名表示的文件 |
boolean canWrite() |
测试应用程序是否可以修改此抽象路径名表示的文件 |
String[] list() |
返回由此抽象路径名所表示的目录中的文件和目录的名称所组成字符串数组 |
String getAbsolutePath() |
返回抽象路径名的绝对路径名字符串 |
String getName() |
返回由此抽象路径名表示的文件或目录的名称,不包括路径名称 |
String getPath() |
将此抽象路径名转换为一个路径名字符串 |
File[] listFiles() |
返回一个抽象路径名数组,这些路径名表示此抽象路径名所表示目录中的文件 |
boolean renameTo(File dest) |
重新命名此抽象路径名表示的文件 |
long length() |
返回由此抽象路径名表示的文件的大小,以byte为单位 |
boolean mkdir() |
创建此抽象路径名指定的目录 |
boolean mkdirs() |
创建此抽象路径名指定的目录,包括创建必需但不存在的父目录。注意,如果此操作失败,可能已成功创建了一些必需的父目录 |
①创建和删除
利用File对象可以很方便地创建和删除目录,也可以创建一个空文件和删除文件。这些方法都返回boolean值以告知操作是否成功。方法列表如下:
boolean mkdir() 创建一个新目录,不包括子目录
boolean mkdirs() 创建目录及子目录,即一次可以创建多级目录
boolean createNewFile() 创建一个新的空文件
boolean delete() 删除一个空目录或文件
boolean renameTo(File) 目录或文件改名
②文件属性测试
File类提供了许多方法给出File对象所对应的文件的各种属性。其中一类是判断性的,大多数无参数都返回boolean值。这些方法有:
canRead()可读否?
canWrite() 可写否?
exists() File对象存在吗?
isDirectory() 是目录吗?
isFile() 是文件吗?
isAbsolute()有File(parent, filename)构建器创建对象时给出的是绝对路径吗?
isHidden()是隐含文件吗?
SetReadOnly()设置为只读文件吗
另一类返回字符串,如文件名和路径等。它们有:
getName() 不含路径的文件名
getPath() 路径文件名
getParent() 父目录名
getAbsolute() 返回绝对路径
toString() 返回File对象的信息
最后还有几个方法是:
long length() 返回文件长度(字节数)
long lastModified() 返回文件的最后修改时间
int compareTo(File f) 比较两个File对象,而不是比较文件内容
boolean equals(Object o) 自Object类继承而来的方法
③显示目录清单
显示目录清单用list()方法,它有两种形式。一种是无参数的,它返回File对象的所有文件和子目录。另一个用过滤器参数,只返回符合条件的文件和子目录列表。
- String[] list()
二、流
Java中的流可以按如下方式分类:
- 按流的方向不同分为:输入流、输出流
- 按处理数据的单位不同分为:字节流、字符流
- 按功能不同分为:节点流、处理流
Java语言中,控制数据流的类都放在java.io包中,java.io包中有两大继承体系。以byte处理为主的Stream类,他们的命名方式是XXXStream;以字符处理为主的Reader / Writer类,他们的命名方式XXXReader或XXXWriter。InputStream、OutputStream、Reader、Writer这四个类,是这两大继承体系的父类
1.InputStream字节输入流的层次结构图与常用方法
(1)常用方法
InputStream是表示输入字节流的所有类的超类,InputStream类常用的方法如下。
方法 |
含义 |
int read() |
一次读取一个byte的数据,并以int类型把数据返回来,如果没有数据可以读了,会返回”-1” |
int read(byte[] buffer) |
把所读取到的数据放在这个byte数组中,返回一个int型的数据,这个int型数据存储了返回的真正读取到的数据byte数 |
int read(byte[] buffer,int offset,int length) |
读取length个字节,并存储到一个字节数组buffer中,并从offset位置开始返回实际读取的字节数 |
void close() |
关闭此输入流并释放与该流关联的所有系统资源 |
OutputStream是表示输出字节流的所有类的超类,OutputStream类常用的方法如下。
方法 |
含义 |
void write(byte[] buffer) |
将要输出的数组先放在一个byte数组中,然后用这个方法一次把一组数据输出出去 |
void write(byte[] buffer,int off,int len) |
将指定字节数组中从偏移量off 开始的 len 个字节写入此输出流 |
abstract void write(int b) |
将指定的字节写入此输出流 |
void close() |
关闭此输出流并释放与此流有关的所有系统资源 |
void flush() |
刷新此输出流并强制输出所有缓冲的输出字节 |
三、序列化和反序列化
1.序列化
也是文件操作
序列化涉及的流
低级流:FileOutputStream FileInputStream
高级流:ObjectOutputStream ObjectInputStream
把对象写入到--->txt文件里,用到的是FileOutputStream ObjectOutputStream
主要代码:ObjectOutputStream.writeObject(Object o)
2.反序列化
是序列化的反过程
对象反序列化其实是从 txt-->Object (解密)
主要代码:ObjectInputStream.readObject()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix