812 行
33 KiB
Plaintext
812 行
33 KiB
Plaintext
|
|
import fileUri from '@ohos.file.fileuri';
|
|||
|
|
import fs, { ListFileOptions, ReadOptions, ReadTextOptions, WriteOptions } from '@ohos.file.fs';
|
|||
|
|
import { BusinessError } from '@kit.BasicServicesKit';
|
|||
|
|
import { StrHelper } from './StrHelper';
|
|||
|
|
import { hilog } from '@kit.PerformanceAnalysisKit';
|
|||
|
|
|
|||
|
|
export class FileHelper {
|
|||
|
|
private constructor() {
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
static readonly separator: string = '/';
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 获取文件目录下的文件夹路径或文件路径。
|
|||
|
|
* @param dirPath 文件路径;支持完整路径和相对路径(download/wps/doc);dirPath传空字符串表示根目录
|
|||
|
|
* @param fileName 文件名(test.text);fileName传空字符串表示文件夹路径
|
|||
|
|
* @param blHap true:HAP级别文件路径、 false:App级别文件路径
|
|||
|
|
* @returns
|
|||
|
|
*/
|
|||
|
|
static getFilesDirPath(dirPath: string = "", fileName: string = "", blHap: boolean = true): string {
|
|||
|
|
let filePath = blHap ? getContext().filesDir : getContext().getApplicationContext().filesDir; //根目录
|
|||
|
|
if (StrHelper.isNotEmpty(dirPath)) {
|
|||
|
|
if (StrHelper.startsWith(dirPath, filePath)) { //路径中包含根目录,是完整路径。
|
|||
|
|
filePath = dirPath;
|
|||
|
|
} else { //路径中不包含根目录,拼接成完整路径。
|
|||
|
|
filePath = filePath + FileHelper.separator + dirPath;
|
|||
|
|
}
|
|||
|
|
if (!FileHelper.accessSync(filePath)) {
|
|||
|
|
FileHelper.mkdirSync(filePath) //如果文件夹不存在就创建
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
if (StrHelper.isNotEmpty(fileName)) {
|
|||
|
|
filePath = filePath + FileHelper.separator + fileName;
|
|||
|
|
}
|
|||
|
|
return filePath;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 获取缓存目录下的文件夹路径或文件路径。
|
|||
|
|
* @param dirPath 文件路径;支持完整路径和相对路径(download/wps/doc);dirPath传空字符串表示根目录
|
|||
|
|
* @param fileName 文件名(test.text);fileName传空字符串表示文件夹路径
|
|||
|
|
* @param blHap true:HAP级别文件路径、 false:App级别文件路径
|
|||
|
|
* @returns
|
|||
|
|
*/
|
|||
|
|
static getCacheDirPath(dirPath: string = "", fileName: string = "", blHap: boolean = true): string {
|
|||
|
|
let filePath = blHap ? getContext().cacheDir : getContext().getApplicationContext().cacheDir; //根目录
|
|||
|
|
if (StrHelper.isNotEmpty(dirPath)) {
|
|||
|
|
if (FileHelper.hasDirPath(dirPath)) { //路径中包含根目录,是完整路径。
|
|||
|
|
filePath = dirPath;
|
|||
|
|
} else { //路径中不包含根目录,拼接成完整路径。
|
|||
|
|
filePath = filePath + FileHelper.separator + dirPath;
|
|||
|
|
}
|
|||
|
|
if (!FileHelper.accessSync(filePath)) {
|
|||
|
|
FileHelper.mkdirSync(filePath) //如果文件夹不存在就创建
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
if (StrHelper.isNotEmpty(fileName)) {
|
|||
|
|
filePath = filePath + FileHelper.separator + fileName;
|
|||
|
|
}
|
|||
|
|
return filePath;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 获取临时目录下的文件夹路径或文件路径。
|
|||
|
|
* @param dirPath 文件路径;支持完整路径和相对路径(download/wps/doc);dirPath传空字符串表示根目录
|
|||
|
|
* @param fileName 文件名(test.text);fileName传空字符串表示文件夹路径
|
|||
|
|
* @param blHap true:HAP级别文件路径、 false:App级别文件路径
|
|||
|
|
* @returns
|
|||
|
|
*/
|
|||
|
|
static getTempDirPath(dirPath: string = "", fileName: string = "", blHap: boolean = true): string {
|
|||
|
|
let filePath = blHap ? getContext().tempDir : getContext().getApplicationContext().tempDir; //根目录
|
|||
|
|
if (StrHelper.isNotEmpty(dirPath)) {
|
|||
|
|
if (FileHelper.hasDirPath(dirPath)) { //路径中包含根目录,是完整路径。
|
|||
|
|
filePath = dirPath;
|
|||
|
|
} else { //路径中不包含根目录,拼接成完整路径。
|
|||
|
|
filePath = filePath + FileHelper.separator + dirPath;
|
|||
|
|
}
|
|||
|
|
if (!FileHelper.accessSync(filePath)) {
|
|||
|
|
FileHelper.mkdirSync(filePath) //如果文件夹不存在就创建
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
if (StrHelper.isNotEmpty(fileName)) {
|
|||
|
|
filePath = filePath + FileHelper.separator + fileName;
|
|||
|
|
}
|
|||
|
|
return filePath;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 判断是否是完整路径
|
|||
|
|
* @param path 文件路径
|
|||
|
|
*/
|
|||
|
|
static hasDirPath(path: string): boolean {
|
|||
|
|
return StrHelper.startsWith(path, "/data/storage/el1/") || StrHelper.startsWith(path, "/data/storage/el2/");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 通过URI或路径,获取FileUri
|
|||
|
|
* @param uriOrPath URI或路径
|
|||
|
|
* @returns
|
|||
|
|
*/
|
|||
|
|
static getFileUri(uriOrPath: string): fileUri.FileUri {
|
|||
|
|
return new fileUri.FileUri(uriOrPath);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 通过URI或路径,获取文件名。
|
|||
|
|
* @param uriOrPath URI或路径
|
|||
|
|
* @returns
|
|||
|
|
*/
|
|||
|
|
static getFileName(uriOrPath: string): string {
|
|||
|
|
return FileHelper.getFileUri(uriOrPath).name;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 通过URI或路径,获取文件路径
|
|||
|
|
* @param uriOrPath URI或路径
|
|||
|
|
* @returns
|
|||
|
|
*/
|
|||
|
|
static getFilePath(uriOrPath: string): string {
|
|||
|
|
return FileHelper.getFileUri(uriOrPath).path;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 通过URI或路径,获取对应文件父目录的URI。
|
|||
|
|
* @param uriOrPath URI或路径
|
|||
|
|
*/
|
|||
|
|
static getParentUri(uriOrPath: string): string {
|
|||
|
|
return FileHelper.getFileUri(uriOrPath).getFullDirectoryUri();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 通过URI或路径,获取对应文件父目录的路径名。
|
|||
|
|
* @param uriOrPath URI或路径
|
|||
|
|
*/
|
|||
|
|
static getParentPath(uriOrPath: string): string {
|
|||
|
|
let parentUri = FileHelper.getParentUri(uriOrPath);
|
|||
|
|
return FileHelper.getFilePath(parentUri)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 以同步方法获取文件URI。
|
|||
|
|
* @param path 应用沙箱路径
|
|||
|
|
* @returns
|
|||
|
|
*/
|
|||
|
|
static getUriFromPath(path: string): string {
|
|||
|
|
return fileUri.getUriFromPath(path);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 根据文件名获取文件后缀
|
|||
|
|
* @param fileName 例如: test.txt test.doc
|
|||
|
|
* @returns
|
|||
|
|
*/
|
|||
|
|
static getFileExtention(fileName: string) {
|
|||
|
|
if (StrHelper.isNotEmpty(fileName) && fileName.includes(".")) {
|
|||
|
|
return fileName.substring(fileName.lastIndexOf(".") + 1);
|
|||
|
|
}
|
|||
|
|
return '';
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 获取指定文件夹下所有文件的大小或指定文件大小。
|
|||
|
|
* @param path 文件夹路径 或 文件路径
|
|||
|
|
*/
|
|||
|
|
static getFileDirSize(path: string): number {
|
|||
|
|
if (FileHelper.accessSync(path)) { //path存在
|
|||
|
|
if (FileHelper.isDirectory(path)) { //文件夹
|
|||
|
|
let count: number = 0;
|
|||
|
|
FileHelper.listFileSync(path, { recursion: true }).forEach((filePath) => {
|
|||
|
|
count = count + FileHelper.lstatSync(path + filePath).size
|
|||
|
|
})
|
|||
|
|
return count;
|
|||
|
|
} else { //文件
|
|||
|
|
return FileHelper.lstatSync(path).size
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 判断文件是否是普通文件。
|
|||
|
|
* @param file string|number 文件应用沙箱路径path或已打开的文件描述符fd。
|
|||
|
|
* @returns
|
|||
|
|
*/
|
|||
|
|
static isFile(file: string | number): boolean {
|
|||
|
|
return fs.statSync(file).isFile();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 判断文件是否是目录。
|
|||
|
|
* @param file string|number 文件应用沙箱路径path或已打开的文件描述符fd。
|
|||
|
|
* @returns
|
|||
|
|
*/
|
|||
|
|
static isDirectory(file: string | number): boolean {
|
|||
|
|
return fs.statSync(file).isDirectory();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 重命名文件或文件夹,使用Promise异步回调。
|
|||
|
|
* @param oldPath string 文件的应用沙箱原路径。
|
|||
|
|
* @param newPath string 文件的应用沙箱新路径。
|
|||
|
|
* @returns
|
|||
|
|
*/
|
|||
|
|
static rename(oldPath: string, newPath: string): Promise<void> {
|
|||
|
|
return fs.rename(oldPath, newPath);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 重命名文件或文件夹,以同步方法。
|
|||
|
|
* @param oldPath string 文件的应用沙箱原路径。
|
|||
|
|
* @param newPath string 文件的应用沙箱新路径。
|
|||
|
|
* @returns
|
|||
|
|
*/
|
|||
|
|
static renameSync(oldPath: string, newPath: string) {
|
|||
|
|
fs.renameSync(oldPath, newPath);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 创建目录,当recursion指定为true,可多层级创建目录,使用Promise异步回调。
|
|||
|
|
* @param path 目录的应用沙箱路径。
|
|||
|
|
* @param recursion 是否多层级创建目录。recursion指定为true时,可多层级创建目录。recursion指定为false时,仅可创建单层目录。
|
|||
|
|
* @returns
|
|||
|
|
*/
|
|||
|
|
static mkdir(path: string, recursion: boolean = true): Promise<void> {
|
|||
|
|
if (recursion) {
|
|||
|
|
return fs.mkdir(path, recursion);
|
|||
|
|
} else {
|
|||
|
|
return fs.mkdir(path);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 创建目录以同步方法,当recursion指定为true,可多层级创建目录。
|
|||
|
|
* @param path 目录的应用沙箱路径。
|
|||
|
|
* @param recursion 是否多层级创建目录。recursion指定为true时,可多层级创建目录。recursion指定为false时,仅可创建单层目录。
|
|||
|
|
*/
|
|||
|
|
static mkdirSync(path: string, recursion: boolean = true) {
|
|||
|
|
if (recursion) {
|
|||
|
|
fs.mkdirSync(path, recursion);
|
|||
|
|
} else {
|
|||
|
|
fs.mkdirSync(path);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 删除整个目录,使用Promise异步回调。
|
|||
|
|
* @param path 目录的应用沙箱路径。
|
|||
|
|
* @returns
|
|||
|
|
*/
|
|||
|
|
static rmdir(path: string): Promise<void> {
|
|||
|
|
return fs.rmdir(path);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 删除整个目录,以同步方法。
|
|||
|
|
* @param path 目录的应用沙箱路径。
|
|||
|
|
*/
|
|||
|
|
static rmdirSync(path: string) {
|
|||
|
|
return fs.rmdirSync(path);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 删除单个文件,使用Promise异步回调。
|
|||
|
|
* @param path 文件的应用沙箱路径。
|
|||
|
|
* @returns
|
|||
|
|
*/
|
|||
|
|
static unlink(path: string): Promise<void> {
|
|||
|
|
return fs.unlink(path);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 删除单个文件,以同步方法。
|
|||
|
|
* @param path 文件的应用沙箱路径。
|
|||
|
|
* @returns
|
|||
|
|
*/
|
|||
|
|
static unlinkSync(path: string) {
|
|||
|
|
fs.unlinkSync(path);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 检查文件是否存在,使用Promise异步回调。
|
|||
|
|
* @param path 文件应用沙箱路径。
|
|||
|
|
* @returns
|
|||
|
|
*/
|
|||
|
|
static access(path: string): Promise<boolean> {
|
|||
|
|
return fs.access(path);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 检查文件是否存在,以同步方法。
|
|||
|
|
* @param path 文件应用沙箱路径。
|
|||
|
|
* @returns
|
|||
|
|
*/
|
|||
|
|
static accessSync(path: string): boolean {
|
|||
|
|
return fs.accessSync(path);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 打开文件,支持使用URI打开文件。使用Promise异步回调。
|
|||
|
|
* @param path string 文件的应用沙箱路径或URI。
|
|||
|
|
* @param mode number 打开文件的选项,必须指定如下选项中的一个,默认以只读方式打开。
|
|||
|
|
* @returns
|
|||
|
|
*/
|
|||
|
|
static open(path: string, mode: number = fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE): Promise<fs.File> {
|
|||
|
|
return fs.open(path, mode);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 打开文件,支持使用URI打开文件。以同步方法。
|
|||
|
|
* @param path string 文件的应用沙箱路径或URI。
|
|||
|
|
* @param mode number 打开文件的选项,必须指定如下选项中的一个,默认以只读方式打开。
|
|||
|
|
* @returns
|
|||
|
|
*/
|
|||
|
|
static openSync(path: string, mode: number = fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE): fs.File {
|
|||
|
|
return fs.openSync(path, mode);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 从文件读取数据,使用Promise异步回调。
|
|||
|
|
* @param fd number 已打开的文件描述符。
|
|||
|
|
* @param buffer ArrayBuffer 用于保存读取到的文件数据的缓冲区。
|
|||
|
|
* @param options 支持如下选项:
|
|||
|
|
* offset,number类型,表示期望读取文件的位置。可选,默认从当前位置开始读。
|
|||
|
|
* length,number类型,表示期望读取数据的长度。可选,默认缓冲区长度。
|
|||
|
|
* @returns
|
|||
|
|
*/
|
|||
|
|
static read(fd: number, buffer: ArrayBuffer, options?: ReadOptions): Promise<number> {
|
|||
|
|
return fs.read(fd, buffer, options)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 从文件读取数据,以同步方法。
|
|||
|
|
* @param fd number 已打开的文件描述符。
|
|||
|
|
* @param buffer ArrayBuffer 用于保存读取到的文件数据的缓冲区。
|
|||
|
|
* @param options 支持如下选项:
|
|||
|
|
* offset,number类型,表示期望读取文件的位置。可选,默认从当前位置开始读。
|
|||
|
|
* length,number类型,表示期望读取数据的长度。可选,默认缓冲区长度。
|
|||
|
|
* @returns
|
|||
|
|
*/
|
|||
|
|
static readSync(fd: number, buffer: ArrayBuffer, options?: ReadOptions): number {
|
|||
|
|
return fs.readSync(fd, buffer, options)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 基于文本方式读取文件(即直接读取文件的文本内容),使用Promise异步回调。
|
|||
|
|
* @param filePath 文件的应用沙箱路径。
|
|||
|
|
* @param options 支持如下选项:
|
|||
|
|
* offset,number类型,表示期望读取文件的位置。可选,默认从当前位置开始读取。
|
|||
|
|
* length,number类型,表示期望读取数据的长度。可选,默认文件长度。
|
|||
|
|
* encoding,string类型,当数据是 string 类型时有效,表示数据的编码方式,默认 'utf-8',仅支持 'utf-8'。
|
|||
|
|
* @returns
|
|||
|
|
*/
|
|||
|
|
static readText(filePath: string, options?: ReadTextOptions): Promise<string> {
|
|||
|
|
return fs.readText(filePath, options);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 基于文本方式读取文件(即直接读取文件的文本内容),以同步方法。
|
|||
|
|
* @param filePath 文件的应用沙箱路径。
|
|||
|
|
* @param options 支持如下选项:
|
|||
|
|
* offset,number类型,表示期望读取文件的位置。可选,默认从当前位置开始读取。
|
|||
|
|
* length,number类型,表示期望读取数据的长度。可选,默认文件长度。
|
|||
|
|
* encoding,string类型,当数据是 string 类型时有效,表示数据的编码方式,默认 'utf-8',仅支持 'utf-8'。
|
|||
|
|
* @returns
|
|||
|
|
*/
|
|||
|
|
static readTextSync(filePath: string, options?: ReadTextOptions): string {
|
|||
|
|
return fs.readTextSync(filePath, options);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 将数据写入文件,使用Promise异步回调。
|
|||
|
|
* @param fd number 已打开的文件描述符。
|
|||
|
|
* @param buffer ArrayBuffer|string 待写入文件的数据,可来自缓冲区或字符串。
|
|||
|
|
* @param options 支持如下选项:
|
|||
|
|
* offset,number类型,表示期望写入文件的位置。可选,默认从当前位置开始写。
|
|||
|
|
* length,number类型,表示期望写入数据的长度。可选,默认缓冲区长度。
|
|||
|
|
* encoding,string类型,当数据是string类型时有效,表示数据的编码方式,默认 'utf-8'。当前仅支持 'utf-8'。
|
|||
|
|
* @returns
|
|||
|
|
*/
|
|||
|
|
static write(fd: number, buffer: ArrayBuffer | string, options?: WriteOptions): Promise<number> {
|
|||
|
|
return fs.write(fd, buffer, options)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 将数据写入文件,以同步方法。
|
|||
|
|
* @param fd number 已打开的文件描述符。
|
|||
|
|
* @param buffer ArrayBuffer|string 待写入文件的数据,可来自缓冲区或字符串。
|
|||
|
|
* @param options 支持如下选项:
|
|||
|
|
* offset,number类型,表示期望写入文件的位置。可选,默认从当前位置开始写。
|
|||
|
|
* length,number类型,表示期望写入数据的长度。可选,默认缓冲区长度。
|
|||
|
|
* encoding,string类型,当数据是string类型时有效,表示数据的编码方式,默认 'utf-8'。当前仅支持 'utf-8'。
|
|||
|
|
* @returns
|
|||
|
|
*/
|
|||
|
|
static writeSync(fd: number, buffer: ArrayBuffer | string, options?: WriteOptions): number {
|
|||
|
|
return fs.writeSync(fd, buffer, options)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 将数据写入文件,并关闭文件。
|
|||
|
|
* @param path string 文件的应用沙箱路径或URI。
|
|||
|
|
* @param buffer ArrayBuffer|string 待写入文件的数据,可来自缓冲区或字符串。
|
|||
|
|
* @param append 是否追加,true-追加,false-不追加(直接覆盖)
|
|||
|
|
* @returns
|
|||
|
|
*/
|
|||
|
|
static async writeEasy(path: string, buffer: ArrayBuffer | string, append: boolean = true): Promise<number> {
|
|||
|
|
try {
|
|||
|
|
let file = FileHelper.openSync(path, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
|
|||
|
|
let offset = append ? FileHelper.statSync(file.fd).size : 0
|
|||
|
|
let options: WriteOptions = { offset: offset, encoding: 'utf-8' };
|
|||
|
|
return await FileHelper.write(file.fd, buffer, options).finally(() => {
|
|||
|
|
FileHelper.close(file.fd); //关闭文件
|
|||
|
|
});
|
|||
|
|
} catch (err) {
|
|||
|
|
let error = err as BusinessError;
|
|||
|
|
hilog.error(0x0000, '=====>', `FileHelper-writeEasy-异常 ~ code: ${error.code} -·- message: ${error.message}`)
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 关闭文件,使用Promise异步回调。
|
|||
|
|
* @param file 已打开的File对象或已打开的文件描述符fd。
|
|||
|
|
* @returns
|
|||
|
|
*/
|
|||
|
|
static close(file: fs.File | number): Promise<void> {
|
|||
|
|
return fs.close(file);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 关闭文件,以同步方法。
|
|||
|
|
* @param file 已打开的File对象或已打开的文件描述符fd。
|
|||
|
|
*/
|
|||
|
|
static closeSync(file: fs.File | number) {
|
|||
|
|
fs.closeSync(file);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 列出文件夹下所有文件名,支持递归列出所有文件名(包含子目录下),支持文件过滤,使用Promise异步回调。
|
|||
|
|
* @param path string 文件夹的应用沙箱路径。
|
|||
|
|
* @param options 文件过滤选项。默认不进行过滤。
|
|||
|
|
* recursion boolean 是否递归子目录下文件名,默认为false。
|
|||
|
|
* listNum number 列出文件名数量。当设置0时,列出所有文件,默认为0。
|
|||
|
|
* filter Filter 文件过滤选项。当前仅支持后缀名匹配、文件名模糊查询、文件大小过滤、最近修改时间过滤。
|
|||
|
|
* @returns
|
|||
|
|
*/
|
|||
|
|
static listFile(path: string, options?: ListFileOptions): Promise<string[]> {
|
|||
|
|
return fs.listFile(path, options);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 列出文件夹下所有文件名,支持递归列出所有文件名(包含子目录下),支持文件过滤,以同步方法。
|
|||
|
|
* @param path string 文件夹的应用沙箱路径。
|
|||
|
|
* @param options 文件过滤选项。默认不进行过滤。
|
|||
|
|
* recursion boolean 是否递归子目录下文件名,默认为false。
|
|||
|
|
* listNum number 列出文件名数量。当设置0时,列出所有文件,默认为0。
|
|||
|
|
* filter Filter 文件过滤选项。当前仅支持后缀名匹配、文件名模糊查询、文件大小过滤、最近修改时间过滤。
|
|||
|
|
* @returns
|
|||
|
|
*/
|
|||
|
|
static listFileSync(path: string, options?: ListFileOptions): string[] {
|
|||
|
|
return fs.listFileSync(path, options);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 获取文件详细属性信息,使用Promise异步回调。
|
|||
|
|
* @param file string|number 文件应用沙箱路径path或已打开的文件描述符fd。
|
|||
|
|
*/
|
|||
|
|
static stat(file: string | number): Promise<fs.Stat> {
|
|||
|
|
return fs.stat(file);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 获取文件详细属性信息,以同步方法。
|
|||
|
|
* @param file string|number 文件应用沙箱路径path或已打开的文件描述符fd。
|
|||
|
|
* @returns
|
|||
|
|
*/
|
|||
|
|
static statSync(file: string | number): fs.Stat {
|
|||
|
|
return fs.statSync(file);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 拷贝文件或者目录,支持拷贝进度监听,使用Promise异步返回。
|
|||
|
|
* @param srcUri 待复制文件或目录的uri。
|
|||
|
|
* @param destUri 目标文件或目录的uri。
|
|||
|
|
* @param options options中提供拷贝进度回调:
|
|||
|
|
* ProgressListener 拷贝进度监听。
|
|||
|
|
* @returns
|
|||
|
|
*/
|
|||
|
|
static copy(srcUri: string, destUri: string, options?: fs.CopyOptions): Promise<void> {
|
|||
|
|
return fs.copy(srcUri, destUri, options);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 复制文件,使用Promise异步回调。
|
|||
|
|
* @param src string|number 待复制文件的路径或待复制文件的文件描述符。
|
|||
|
|
* @param dest string|number 目标文件路径或目标文件的文件描述符。
|
|||
|
|
* @param mode number 提供覆盖文件的选项,当前仅支持0,且默认为0。0:完全覆盖目标文件。
|
|||
|
|
* @returns
|
|||
|
|
*/
|
|||
|
|
static copyFile(src: string | number, dest: string | number, mode: number = 0): Promise<void> {
|
|||
|
|
return fs.copyFile(src, dest, mode);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 以同步方法复制文件。
|
|||
|
|
* @param src string|number 待复制文件的路径或待复制文件的文件描述符。
|
|||
|
|
* @param dest string|number 目标文件路径或目标文件的文件描述符。
|
|||
|
|
* @param mode number 提供覆盖文件的选项,当前仅支持0,且默认为0。0:完全覆盖目标文件。
|
|||
|
|
*/
|
|||
|
|
static copyFileSync(src: string | number, dest: string | number, mode: number = 0) {
|
|||
|
|
fs.copyFileSync(src, dest, mode);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 复制源文件夹至目标路径下,只能复制沙箱里的文件夹,使用Promise异步返回。
|
|||
|
|
* @param src 源文件夹的应用沙箱路径。
|
|||
|
|
* @param dest 目标文件夹的应用沙箱路径。
|
|||
|
|
* @param mode 复制模式:
|
|||
|
|
* mode为0,文件级别抛异常。目标文件夹下存在与源文件夹名冲突的文件夹,若冲突文件夹下存在同名文件,则抛出异常。源文件夹下未冲突的文件全部移动至目标文件夹下,目标文件夹下未冲突文件将继续保留,且冲突文件信息将在抛出异常的data属性中以Array<ConflictFiles>形式提供。
|
|||
|
|
* mode为1,文件级别强制覆盖。目标文件夹下存在与源文件夹名冲突的文件夹,若冲突文件夹下存在同名文件,则强制覆盖冲突文件夹下所有同名文件,未冲突文件将继续保留。
|
|||
|
|
* @returns
|
|||
|
|
*/
|
|||
|
|
static copyDir(src: string, dest: string, mode: number = 1): Promise<void> {
|
|||
|
|
return fs.copyDir(src, dest, mode);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 以同步方法复制源文件夹至目标路径下,只能复制沙箱里的文件夹。
|
|||
|
|
* @param src 源文件夹的应用沙箱路径。
|
|||
|
|
* @param dest 目标文件夹的应用沙箱路径。
|
|||
|
|
* @param mode 复制模式:
|
|||
|
|
* mode为0,文件级别抛异常。目标文件夹下存在与源文件夹名冲突的文件夹,若冲突文件夹下存在同名文件,则抛出异常。源文件夹下未冲突的文件全部移动至目标文件夹下,目标文件夹下未冲突文件将继续保留,且冲突文件信息将在抛出异常的data属性中以Array<ConflictFiles>形式提供。
|
|||
|
|
* mode为1,文件级别强制覆盖。目标文件夹下存在与源文件夹名冲突的文件夹,若冲突文件夹下存在同名文件,则强制覆盖冲突文件夹下所有同名文件,未冲突文件将继续保留。
|
|||
|
|
* @returns
|
|||
|
|
*/
|
|||
|
|
static copyDirSync(src: string, dest: string, mode: number = 1) {
|
|||
|
|
fs.copyDirSync(src, dest, mode);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 移动文件,使用Promise异步回调。
|
|||
|
|
* @param src string 源文件的应用沙箱路径。
|
|||
|
|
* @param dest string 目的文件的应用沙箱路径。
|
|||
|
|
* @param mode number 移动模式。若mode为0,移动位置存在同名文件时,强制移动覆盖。若mode为1,移动位置存在同名文件时,抛出异常。默认为0。
|
|||
|
|
* @returns
|
|||
|
|
*/
|
|||
|
|
static moveFile(src: string, dest: string, mode: number = 0): Promise<void> {
|
|||
|
|
return fs.moveFile(src, dest, mode)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 移动文件,以同步方法。
|
|||
|
|
* @param src string 源文件的应用沙箱路径。
|
|||
|
|
* @param dest string 目的文件的应用沙箱路径。
|
|||
|
|
* @param mode number 移动模式。若mode为0,移动位置存在同名文件时,强制移动覆盖。若mode为1,移动位置存在同名文件时,抛出异常。默认为0。
|
|||
|
|
* @returns
|
|||
|
|
*/
|
|||
|
|
static moveFileSync(src: string, dest: string, mode: number = 0) {
|
|||
|
|
fs.moveFileSync(src, dest, mode)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 移动源文件夹至目标路径下,使用Promise异步返回。
|
|||
|
|
* @param src 源文件夹的应用沙箱路径
|
|||
|
|
* @param dest 目标文件夹的应用沙箱路径
|
|||
|
|
* @param mode 移动模式:
|
|||
|
|
* mode为0,文件夹级别抛异常。若目标文件夹下存在与源文件夹名冲突的非空文件夹,则抛出异常。
|
|||
|
|
* mode为1,文件级别抛异常。目标文件夹下存在与源文件夹名冲突的文件夹,若冲突文件夹下存在同名文件,则抛出异常。源文件夹下未冲突的文件全部移动至目标文件夹下,目标文件夹下未冲突文件将继续保留,且冲突文件信息将在抛出异常的data属性中以Array<ConflictFiles>形式提供。
|
|||
|
|
* mode为2,文件级别强制覆盖。目标文件夹下存在与源文件夹名冲突的文件夹,若冲突文件夹下存在同名文件,则强制覆盖冲突文件夹下所有同名文件,未冲突文件将继续保留。
|
|||
|
|
* mode为3,文件夹级别强制覆盖。移动源文件夹至目标文件夹下,目标文件夹下移动的文件夹内容与源文件夹完全一致。若目标文件夹下存在与源文件夹名冲突的文件夹,该文件夹下所有原始文件将不会保留。
|
|||
|
|
* @returns
|
|||
|
|
*/
|
|||
|
|
static moveDir(src: string, dest: string, mode: number = 3): Promise<void> {
|
|||
|
|
return fs.moveDir(src, dest, mode);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 以同步方法移动源文件夹至目标路径下。
|
|||
|
|
* @param src 源文件夹的应用沙箱路径
|
|||
|
|
* @param dest 目标文件夹的应用沙箱路径
|
|||
|
|
* @param mode 移动模式:
|
|||
|
|
* mode为0,文件夹级别抛异常。若目标文件夹下存在与源文件夹名冲突的非空文件夹,则抛出异常。
|
|||
|
|
* mode为1,文件级别抛异常。目标文件夹下存在与源文件夹名冲突的文件夹,若冲突文件夹下存在同名文件,则抛出异常。源文件夹下未冲突的文件全部移动至目标文件夹下,目标文件夹下未冲突文件将继续保留,且冲突文件信息将在抛出异常的data属性中以Array<ConflictFiles>形式提供。
|
|||
|
|
* mode为2,文件级别强制覆盖。目标文件夹下存在与源文件夹名冲突的文件夹,若冲突文件夹下存在同名文件,则强制覆盖冲突文件夹下所有同名文件,未冲突文件将继续保留。
|
|||
|
|
* mode为3,文件夹级别强制覆盖。移动源文件夹至目标文件夹下,目标文件夹下移动的文件夹内容与源文件夹完全一致。若目标文件夹下存在与源文件夹名冲突的文件夹,该文件夹下所有原始文件将不会保留。
|
|||
|
|
* @returns
|
|||
|
|
*/
|
|||
|
|
static moveDirSync(src: string, dest: string, mode: number = 3) {
|
|||
|
|
return fs.moveDirSync(src, dest, mode);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 截断文件,使用Promise异步回调。
|
|||
|
|
* @param file string|number 文件的应用沙箱路径或已打开的文件描述符fd。
|
|||
|
|
* @param len number 文件截断后的长度,以字节为单位。默认为0。
|
|||
|
|
* @returns
|
|||
|
|
*/
|
|||
|
|
static truncate(file: string | number, len: number = 0): Promise<void> {
|
|||
|
|
return fs.truncate(file, len)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 截断文件,以同步方法。
|
|||
|
|
* @param file string|number 文件的应用沙箱路径或已打开的文件描述符fd。
|
|||
|
|
* @param len number 文件截断后的长度,以字节为单位。默认为0。
|
|||
|
|
* @returns
|
|||
|
|
*/
|
|||
|
|
static truncateSync(file: string | number, len: number = 0) {
|
|||
|
|
fs.truncateSync(file, len)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 获取链接文件信息,使用Promise异步回调。
|
|||
|
|
* @param path string 文件的应用沙箱路径。
|
|||
|
|
* @returns
|
|||
|
|
*/
|
|||
|
|
static lstat(path: string): Promise<fs.Stat> {
|
|||
|
|
return fs.lstat(path);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 获取链接文件信息,以同步方法。
|
|||
|
|
* @param path string 文件的应用沙箱路径。
|
|||
|
|
* @returns
|
|||
|
|
*/
|
|||
|
|
static lstatSync(path: string): fs.Stat {
|
|||
|
|
return fs.lstatSync(path);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 同步文件数据,使用Promise异步回调。
|
|||
|
|
* @param fd number 已打开的文件描述符。
|
|||
|
|
* @returns
|
|||
|
|
*/
|
|||
|
|
static fsync(fd: number): Promise<void> {
|
|||
|
|
return fs.fsync(fd);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 同步文件数据,以同步方法。
|
|||
|
|
* @param fd number 已打开的文件描述符。
|
|||
|
|
*/
|
|||
|
|
static fsyncSync(fd: number) {
|
|||
|
|
fs.fsyncSync(fd);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 实现文件内容数据同步,使用Promise异步回调。
|
|||
|
|
* @param fd number 已打开的文件描述符。
|
|||
|
|
* @returns
|
|||
|
|
*/
|
|||
|
|
static fdatasync(fd: number): Promise<void> {
|
|||
|
|
return fs.fdatasync(fd);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 实现文件内容数据同步,以同步方法。
|
|||
|
|
* @param fd number 已打开的文件描述符。
|
|||
|
|
*/
|
|||
|
|
static fdatasyncSync(fd: number) {
|
|||
|
|
fs.fdatasyncSync(fd);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 基于文件路径打开文件流,使用Promise异步回调。
|
|||
|
|
* @param path string 文件的应用沙箱路径。
|
|||
|
|
* @param mode string 文件打开类型
|
|||
|
|
* r:打开只读文件,该文件必须存在。
|
|||
|
|
* r+:打开可读写的文件,该文件必须存在。
|
|||
|
|
* w:打开只写文件,若文件存在则文件长度清0,即该文件内容会消失。若文件不存在则建立该文件。
|
|||
|
|
* w+:打开可读写文件,若文件存在则文件长度清0,即该文件内容会消失。若文件不存在则建立该文件。
|
|||
|
|
* a:以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。
|
|||
|
|
* a+:以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。
|
|||
|
|
* @returns
|
|||
|
|
*/
|
|||
|
|
static createStream(path: string, mode: string = 'r'): Promise<fs.Stream> {
|
|||
|
|
return fs.createStream(path, mode)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 基于文件路径打开文件流,以同步方法。
|
|||
|
|
* @param path string 文件的应用沙箱路径。
|
|||
|
|
* @param mode string 文件打开类型
|
|||
|
|
* r:打开只读文件,该文件必须存在。
|
|||
|
|
* r+:打开可读写的文件,该文件必须存在。
|
|||
|
|
* w:打开只写文件,若文件存在则文件长度清0,即该文件内容会消失。若文件不存在则建立该文件。
|
|||
|
|
* w+:打开可读写文件,若文件存在则文件长度清0,即该文件内容会消失。若文件不存在则建立该文件。
|
|||
|
|
* a:以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。
|
|||
|
|
* a+:以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。
|
|||
|
|
* @returns
|
|||
|
|
*/
|
|||
|
|
static createStreamSync(path: string, mode: string = 'r'): fs.Stream {
|
|||
|
|
return fs.createStreamSync(path, mode);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 基于文件描述符打开文件流,使用Promise异步回调。
|
|||
|
|
* @param fd number 已打开的文件描述符。
|
|||
|
|
* @param mode string 文件打开类型
|
|||
|
|
* r:打开只读文件,该文件必须存在。
|
|||
|
|
* r+:打开可读写的文件,该文件必须存在。
|
|||
|
|
* w:打开只写文件,若文件存在则文件长度清0,即该文件内容会消失。若文件不存在则建立该文件。
|
|||
|
|
* w+:打开可读写文件,若文件存在则文件长度清0,即该文件内容会消失。若文件不存在则建立该文件。
|
|||
|
|
* a:以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。
|
|||
|
|
* a+:以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。
|
|||
|
|
* @returns
|
|||
|
|
*/
|
|||
|
|
static fdopenStream(fd: number, mode: string = 'r'): Promise<fs.Stream> {
|
|||
|
|
return fs.fdopenStream(fd, mode)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 基于文件描述符打开文件流,以同步方法。
|
|||
|
|
* @param fd number 已打开的文件描述符。
|
|||
|
|
* @param mode string 文件打开类型
|
|||
|
|
* r:打开只读文件,该文件必须存在。
|
|||
|
|
* r+:打开可读写的文件,该文件必须存在。
|
|||
|
|
* w:打开只写文件,若文件存在则文件长度清0,即该文件内容会消失。若文件不存在则建立该文件。
|
|||
|
|
* w+:打开可读写文件,若文件存在则文件长度清0,即该文件内容会消失。若文件不存在则建立该文件。
|
|||
|
|
* a:以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。
|
|||
|
|
* a+:以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。
|
|||
|
|
* @returns
|
|||
|
|
*/
|
|||
|
|
static fdopenStreamSync(fd: number, mode: string = 'r'): fs.Stream {
|
|||
|
|
return fs.fdopenStreamSync(fd, mode)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 创建临时目录,使用Promise异步回调。
|
|||
|
|
* @param prefix string 用随机产生的字符串替换以“XXXXXX”结尾目录路径。
|
|||
|
|
* @returns
|
|||
|
|
*/
|
|||
|
|
static mkdtemp(prefix: string): Promise<string> {
|
|||
|
|
return fs.mkdtemp(prefix);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 创建临时目录,以同步的方法。
|
|||
|
|
* @param prefix string 用随机产生的字符串替换以“XXXXXX”结尾目录路径。
|
|||
|
|
* @returns
|
|||
|
|
*/
|
|||
|
|
static mkdtempSync(prefix: string): string {
|
|||
|
|
return fs.mkdtempSync(prefix);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 将文件描述符转化为File。
|
|||
|
|
* @param fd 文件描述符。
|
|||
|
|
* @returns
|
|||
|
|
*/
|
|||
|
|
static dup(fd: number): fs.File {
|
|||
|
|
return fs.dup(fd);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 修改文件最近访问时间属性。
|
|||
|
|
* path 文件的应用沙箱路径。
|
|||
|
|
* mtime 待更新的时间戳。自1970年1月1日起至目标时间的毫秒数。仅支持修改文件最近访问时间属性。
|
|||
|
|
* @returns
|
|||
|
|
*/
|
|||
|
|
static utimes(path: string, mtime: number): void {
|
|||
|
|
fs.utimes(path, mtime);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 格式化文件大小
|
|||
|
|
* @param fileSize
|
|||
|
|
* @returns
|
|||
|
|
*/
|
|||
|
|
static getFormatFileSize(fileSize: number): string {
|
|||
|
|
if (fileSize < 1024) {
|
|||
|
|
return fileSize + "B";
|
|||
|
|
} else if (fileSize < 1024 * 1024) {
|
|||
|
|
return (fileSize / 1024).toFixed(1) + "KB";
|
|||
|
|
} else if (fileSize < 1024 * 1024 * 1024) {
|
|||
|
|
return (fileSize / (1024 * 1024)).toFixed(1) + "MB";
|
|||
|
|
} else if (fileSize < 1024 * 1024 * 1024 * 1024) {
|
|||
|
|
return (fileSize / (1024 * 1024 * 1024)).toFixed(1) + "GB";
|
|||
|
|
} else {
|
|||
|
|
return (fileSize / (1024 * 1024 * 1024 * 1024)).toFixed(1) + "TB";
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|