File类
- File类的一个对象,代表一个文件或者一个文件目录
- File类中涉及到关于文件或文件目录的创建、删除、重命名、修改时间、文件大小等方法,并未涉及到写入或者读取文件内容的操作,如果需要读取或者写入文件内容,必须使用IO流来来完成
构造方法
File(String filePath)
File(String parentPath,String childPath)
File(File parentFile,String childPath)
路径分类
- 相对路径:相较于某个路径下,指明的路径
- 绝对路径:包含盘符在内的文件夹或者文件目录的路径
常用方法
publicString getAbsolutePath() 获取绝对路径
public String getPath() 获取路径
public Strnig getName 获取名称
public String getParent 获取上层文件目录路径
public long length() 获取文件长度
public long lastModified() 获取最后一次修改的时间
//文件目录
public String[] list() 获取指定目录下的所有文件目录的名称数组
public File[] listFiles() 获取指定目录下的所有文件或者文件目录的Flle数组
File类的重命名
public boolean renameTo(File dest) 把文件重命名为指定的文件路径
File类的判断
public boolean isDirectory() 判断是否是文件目录
isFile() 是否为文件
exists() 是否存在
canRead() 是否可读
canWrite() 是否可写
isHidden() 是否隐藏
File类的创建功能
public boolean createNewFile() 创建文件
public boolean mkdir() 创建文件目录。如果此文件上层目录不存在,创建失败
public boolean mkdirs() 创建文件目录,如果此文件上层目录不存在,一并创建
File类删除
public boolean delete() 删除文件或者文件夹,不走回收站
内存解析
IO流
数据的传输需要载体,比如网络,线路
数据流的分类
- 流向
程序->外设 输出流
外设->程序 输入流 - 单位
按照字节 字节流
按照字符 字符流
对于文本文件,使用字符流处理 Writer Reader
对于非文本文件,使用字节流处理 InputStream OutputStream
层次结构,(访问的是文件,还可以访问数组,访问管道,访问字符串
Object
Writer 所有字符输出流的父类
OutputStreamWriter FileWriter 文件字符输出流
BufferedWriter 包装流 字符输出缓冲流
Reader 所有字符输入类的父类
InputStreamReader FileReader 文件字符输入流
BufferedReader 包装流 字节输入缓冲流
OutputStream 所有字节输出流的父类
FileOutputStream 文件字节输出流
ObjectOutputStream 包装流 对象字节输出流
InputStream 所有字节输入流的父类
FileInputStream 文件字节输入流
ObjectOutputStream 包装流 对象字节输入流
Java的IO流共涉及40多个类,实际上非常的规则,都是从四个基类派生的,
由这四个基类派生出的子类名称都是以其父类作为子类名后缀
InputStream 和Reader,是所有输入类的基类
InputStream(典型实现FileInputStream)
读取的是非文本数据之类的原始字节流,所以在对象字节输入流时需要反序列化
int read() 从输入流中读取数据的下一个字节,返回0-255之间的int字节值,如果到末尾没有可用的字节,则返回值-1
int read(byte[] b) 从此输入流中将最多b.length个字节的数据读入一个byte数组中,如果到末尾没有可用的字节,则返回值-1,否则以整数的形式返回实际读取的字节数
int read(byte[] b,int off,int len) 将输入流中最多len个数据字节读入byte数组,但是读取的字节数也可能小于该值,如果到末尾没有可用的字节,则返回值-1,否则以整数的形式返回实际读取的字节数
public void close throws IOException 关闭此输入流并释放与该流相关的所有系统资源
Reader(典型实现:FileReader)
读取的是字符流,下列的方法与InputStream中的作用差不多,但是读取的是字符
int read()
int read(char[] c)
int read(char[] c,int off,int len)
public void close throws IOException
程序打开的文件IO资源不属于内存里的资源,垃圾回收机制无法回收该资源,所以应该显式的关闭IO资源
OutputStream和Writer也非常的相似
以OutputStrem为例,Writer就是将byte[]-> char[] 或者 String
void write(int b)将指定字节写入此输入流
void write(byte[] b) 将b.length个字节从指定的byte数组写入此输入流
void write(byte[] b,int off,int len) 将指定byte数组中从偏移量off开始的len个字节写入此输出流。
void flush()刷新此输出流并强制写出所有缓冲的输出字节,调用此方法指示应将这些字节立即写入它们预期的目标。
void close()关闭此输岀流并释放与该流关联的所有系统资源
输入输出标准化过程
输入:
- 创建FIle类的对象,指明读取数据的来源
- 创建相应的输入流,将FIle类的对象作为参数,传入输入流中
- 具体读入过程:创建对应的byte[] 或者char[]
- 关闭流资源
输出:
- 创建FIle类的对象,指明写出的数据的位置
- 常见对应的输出流,将FIle类对象作为参数传入流的构造器中
- 具体的写过程:write(char[]/byte[] buffer, 0,len)
- 关闭流资源
包装流,包装流是对已有对象进行功能的增强,所以都需要一个相应的对象参数。
BufferedWriter将文本写入字符输出流,BufferedReader将文本从字符输出流中读出,效率高,可以指定缓冲区的大小
构造函数
常用方法
newLine() 使用平台自己的分隔符的概念
ObjectOutputStream是将对象从流中读取出来,称为反序列化,是一种创建对象的方式
ObjectInputStream是将对象写入流中,也称之为序列化(transient),
进行序列化与反序列化的对象需要实现Serializable接口
集合框架下的类都实现了Serializable接口,所以如果集合中的类实现了Serializable接口,那么就可以进行序列化与反序列化
常用方法
ObjectOutputStream.writeObject 将指定对象写入流中
ObjectInputStream.readObject 将对象从流中读出