介绍
本文介绍 ohos.file.fs 对文件进行操作
导包
import { fileIo as fs } from '@kit.CoreFileKit';
import { BusinessError } from '@kit.BasicServicesKit';
错误码
下面很多操作中,会抛出异常,异常信息中包含错误码,详见 链接
打开、创建文件
同步方式
openSync(path: string, mode?: number): File
解释:
path:
string类型,必填,打开文件或目录的应用沙箱路径或URI。mode:
number类型,打开文件或目录的选项。默认以只读方式打开OpenMode.READ_ONLY(0o0):只读打开。
OpenMode.WRITE_ONLY(0o1):只写打开。
OpenMode.READ_WRITE(0o2):读写打开。
给定如下功能选项,以按 位或 的方式追加,默认不给定任何额外选项:
OpenMode.CREATE(0o100):若文件不存在,则创建文件。
OpenMode.TRUNC(0o1000):如果文件存在且文件具有写权限,则将其长度裁剪为零。
OpenMode.APPEND(0o2000):以追加方式打开,后续写将追加到文件末尾。
OpenMode.DIR(0o200000):如果path不指向目录,则出错。不允许附加写权限。
OpenMode.SYNC(0o4010000):以同步IO的方式打开文件。
例子
let filePath = pathDir + "/test.txt";
let file = fs.openSync(filePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
console.info("file fd: " + file.fd);
fs.closeSync(file);
异步方式
open(path: string, mode?: number): Promise<File>
参数:如上
返回值: Promise<File>:Promise 对象。返回 File 对象。
例子
import { BusinessError } from '@kit.BasicServicesKit';
let filePath = pathDir + "/test.txt";
fs.open(filePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE).then((file: fs.File) => {
console.info("file fd: " + file.fd);
fs.closeSync(file);
}).catch((err: BusinessError) => {
console.error("open file failed with error message: " + err.message + ", error code: " + err.code);
});
关闭文件
以同步方法关闭文件或目录。
提示:打开文件后,要及时的关闭
closeSync(file: number | File): void
参数:
- file:
number | File,必填,已打开的File对象或已打开的文件描述符fd。关闭后file对象或文件描述符fd不再具备实际意义,不可再用于进行读写等操作。
例子
let filePath = pathDir + "/test.txt";
let file = fs.openSync(filePath);
fs.closeSync(file);
获取详细信息
获取文件或目录详细属性信息,使用promise异步回调。
同步方式
以同步方法获取文件或目录详细属性信息。
statSync(file: string | number): Stat
参数:
- file:
string | number,必填,文件或目录应用沙箱路径path或已打开的文件描述符fd。
返回值: Stat类型,表示文件或目录的具体信息。
例子
let stat = fs.statSync(pathDir);
console.info("get file info succeed, the size of file is " + stat.size);
异步方式
stat(file: string | number): Promise<Stat>
参数:
- file:
string | number,必填,文件或目录应用沙箱路径path或已打开的文件描述符fd。
返回值:Promise<Stat>:Promise对象。返回文件或目录的具体信息。
例子
let filePath = pathDir + "/test.txt";
fs.stat(filePath).then((stat: fs.Stat) => {
console.info("get file info succeed, the size of file is " + stat.size);
}).catch((err: BusinessError) => {
console.error("get file info failed with error message: " + err.message + ", error code: " + err.code);
});
Stat
文件具体信息,在调用Stat的方法前,需要先通过stat()方法(同步或异步)构建一个Stat实例。
属性
- ino:
bigint类型,标识该文件。通常同设备上的不同文件的INO不同。 mode:
number,表示文件权限,各特征位的含义如下(说明:以下值为八进制,取得的返回值为十进制,请换算后查看。):0o400:用户读。对于普通文件,所有者可读取文件;对于目录,所有者可读取目录项。
0o200:用户写。对于普通文件,所有者可写入文件;对于目录,所有者可创建/删除目录项。
0o100:用户执行。对于普通文件,所有者可执行文件;对于目录,所有者可在目录中搜索给定路径名。
0o040:用户组读。对于普通文件,所有用户组可读取文件;对于目录,所有用户组可读取目录项。
0o020:用户组写。对于普通文件,所有用户组可写入文件;对于目录,所有用户组可创建/删除目录项。
0o010:用户组执行。对于普通文件,所有用户组可执行文件;对于目录,所有用户组是否可在目录中搜索给定路径名。
0o004:其他读。对于普通文件,其余用户可读取文件;对于目录,其他用户组可读取目录项。
0o002:其他写。对于普通文件,其余用户可写入文件;对于目录,其他用户组可创建/删除目录项。
0o001:其他执行。对于普通文件,其余用户可执行文件;对于目录,其他用户组可在目录中搜索给定路径名。
uid:
number类型,文件所有者的ID。gid:
number类型,文件所有组的ID。size:
number类型,文件的大小,以字节为单位。仅对普通文件有效。atime:
number类型,上次访问该文件的时间,表示距1970年1月1日0时0分0秒的秒数。注意:目前用户数据分区默认以“noatime”方式挂载,atime更新被禁用。mtime:
number类型,上次修改该文件的时间,表示距1970年1月1日0时0分0秒的秒数。ctime:
number类型,最近改变文件状态的时间,表示距1970年1月1日0时0分0秒的秒数。atimeNs:
bigint类型,上次访问该文件的时间,表示距1970年1月1日0时0分0秒的纳秒数。注意:目前用户数据分区默认以“noatime”方式挂载,atime更新被禁用。mtimeNs:
bigint类型,上次修改该文件的时间,表示距1970年1月1日0时0分0秒的纳秒数。ctimeNs:
bigint类型,最近改变文件状态的时间,表示距1970年1月1日0时0分0秒的纳秒数。location:
LocationType类型,文件的位置,表示该文件是本地文件或者云端文件。
文件是否存在
同步方式
accessSync(path: string, mode?: AccessModeType): boolean
参数:
- path:
string类型,必填,文件或目录应用沙箱路径。 - mode:
AccessModeType类型,文件或目录校验的权限。不填该参数则默认校验文件或目录是否存在。
返回值: boolean 类型,返回true,表示文件存在;返回false,表示文件不存在。
例子
import { BusinessError } from '@kit.BasicServicesKit';
let filePath = pathDir + "/test.txt";
try {
let res = fs.accessSync(filePath);
if (res) {
console.info("file exists");
} else {
console.info("file not exists");
}
} catch(error) {
let err: BusinessError = error as BusinessError;
console.error("accessSync failed with error message: " + err.message + ", error code: " + err.code);
}
异步方式
access(path: string, mode?: AccessModeType): Promise<boolean>
参数:同上
返回值:Promise<boolean>,Promise对象。返回布尔值。返回true,表示文件存在;返回false,表示文件不存在。
例子
import { BusinessError } from '@kit.BasicServicesKit';
let filePath = pathDir + "/test.txt";
fs.access(filePath).then((res: boolean) => {
if (res) {
console.info("file exists");
} else {
console.info("file not exists");
}
}).catch((err: BusinessError) => {
console.error("access failed with error message: " + err.message + ", error code: " + err.code);
});