文件操作和IO

目录

一、文件

二、Java中操作文件

2.1 File 类

2.2 文件内容的操作(流)

2.2.1 InputStream 

2.2.2 FileInputStream

2.2.3 用 Scanner 进行字符读取

2.2.4 OutputStream

总结


一、文件

文件指的是存储在硬盘上的文件。硬盘上文件的目录结构是树形结构。目录分隔符推荐用 "/"

【文件的路径】

1、绝对路径:从根目录目标文件

2、相对路径:从当前目录目标文件

二、Java中操作文件

2.1 File 类

在 Java 中提供了 File 类来表示文件。

【构造方法】

方法说明
File(File parent, String child)根据父目录 + 孩子文件路径,创建一个新的 File 实例
File(String pathname)根据文件路径创建一个新的 File 实例,路径可以是绝对路径或相对路径 
(也可以是不存在的路径)
File(String parent, String child)根据父目录路径 + 孩子文件路径,创建一个新的 File 实例

【文件操作方法】

方法说明
String getParent()返回 File 对象的父目录文件路径
String getName()返回 File 对象的纯文件名称
String getPath()返回 File 对象的文件路径
String getAbsolutePath()返回 File 对象的绝对路径
String getCanonicalPath()返回 File 对象修饰过的绝对路径
boolean exists()判断 File 对象描述的文件是否存在
boolean isDirectory()判断 File 对象代表的文件是否是一个目录
boolean isFile()判断 File 对象代表的文件是否是一个普通文件
boolean createNewFile()根据 File 对象删除该文件,成功后返回 true
boolean delete()根据 File 对象创建一个空文件,成功后返回 true
void deleteOnExit()根据 File 对象,到 JVM 运行结束时标注文件将被删除
String[] list()返回 File 对象代表的目录下所有文件名
File[] listFiles()返回 File 对象代表的目录下所有文件,以 File 对象表示
boolean mkdir()创建 File 对象代表的目录
boolean mkdirs()创建 File 对象代表的目录,如果必要,会创建中间目录
boolean renameTo(File dest)进行文件改名,也可以视为剪切、粘贴操作
boolean canRead()判断用户对文件是否具有可读权限
boolean canWrite()判断用户对文件是否具有可写权限

2.2 文件内容的操作(流)

Java 标准库对于进行了一系列的封装,提供了一组类来负责这些操作,大致可以分为两个类别:

1、字节流

以字节为单位进行读写,一次最少读写一个字节。

【代表类】

InputStream:输入

OutputStream:输出

2、字符流

以字符为单位进行读写,一次最少读写一个汉字。举个例子,若用 utf8 表示汉字,3 个字节就是一个汉字,故一次读写最少读写 3 个字节 (一个汉字为单位)。

【代表类】

Reader:输入

Writer:输出

2.2.1 InputStream 

方法说明
int read()读取一个字节的数据,返回 -1 表示已经读完了
int read(byte[] b)最多读取 b.length 字节的数据到 b 中,返回实际读到的数量,-1表示读完了
int read(byte[] b, int off, int len)最多读取 len - off 字节的数据到 b 中,放在从 off 开始,返回实际读到的数量;-1 表示已经读完了
void close()关闭字节流

2.2.2 FileInputStream

InputStream 只是⼀个抽象类,要使用还需要具体的实现类。关于 InputStream 的实现类有很多,基本可以认为不同的输入设备都可以对应一个 InputStream 类

我们现在只关心从文件中读取,所以使用 FileInputStream 类

构造方法说明
FileInputStream(File file)利用 File 构造文件输入流
FileInputStream(String name)利用文件路径构造文件输入流

2.2.3 用 Scanner 进行字符读取

可以使用 Scanner 辅助我们读取文件,System.in 本质上就是一个 InputStream

构造方法说明
Scanner(InputStream is, String charset)使用 charset 字符集进行 is 的扫描读取

2.2.4 OutputStream

方法说明
void write(int b)写入要给字节的数据
void write(byte[] b)将 b 这个字符数组中的数据全部写入 os 中
int write(byte[] b, int off, int len)将 b 这个字符数组中从 off 开始的 数据写入 os 中,一共写 len 个
void close()关闭字节流
void flush()重要:我们知道 I/O 的速度是很慢的,所以大多的 OutputStream 为了减少设备操作的次数,在写数据的时候都会将数据先暂时写入内存的一个指定区域里,直到该区域满了或者其他指定条件时才真正将数据写入设备中,这个区域一般称为缓冲区。但造成一个结果,就是我们写的数据,很可能会遗留一部分在缓冲区中。需要在最后或者合适的位置,调用 flush (刷新) 操作,将数据刷到设备中

总结

1、文件路径分隔符推荐用 "/"。

2、有 File 对象并不代表文件真实存在。

3、System.in 本质上就是一个 InputStream。

4、InputStream 和 OutputStream 都是抽象类,需要具体的实现类。

5、OutputStream 暂存至缓冲区的数据,可能会有残留,需要刷新至最后的位置中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值