OpenHarmony—文件管理系列之一
??https://harmonyos.51cto.com??
前言
本系列記錄團隊openHarmony 的學習和實踐中,所踩過的坑以及填坑的記錄,可能社區已有分享相關的文檔。
文件管理
文件管理的功能點較多,團隊將持續學習試驗,并總結相應的知識點與大家分享。官方接口API:
https://developer.harmonyos.com/cn/docs/documentation/doc-references/js-apis-fileio-0000001168366687
https://gitee.com/openharmony/interface_sdk-js/blob/master/api/@ohos.fileio.d.ts
一、文件打開
文件打開方法,有3個參數path、flags、mode。其中flags表示 打開文件 ,默認以只讀方式打開 ;mode,若創建文件 , 則指定文件的權限,默認給定0o666 。
// 異步方式1:promise形式打開文件
let fd = await fileio.open(path, 0o1, 0o0200);
// 異步方式2:使用callback形式打開文件
await fileio.open(path, 0, function(err, fd) {
});
// 同步方式打開文件
let fd = fileio.openSync(path,flags,mode);
二、文件寫入
文件寫入,官方提供了多種方式可以實現,比如:
let fd = fileio.openSync(fpath, 0o102, 0o666);
// 異步方式1:promise形式返回結果
let num = await fileio.write(fd, "hello, world");// 返回結果:Promise<number>
// 異步方式2:使用callback形式返回結果
fileio.write(fd, "hello, world", function (err, bytesWritten) {
if (!err) {
console.log(bytesWritten)
}
});
// 同步方式
let num = fileio.writeSync(fd, "hello, world");
文件寫入前,如果寫入文件的路徑不存在,則直接寫入會報錯,所以需要判斷路徑是否存在后,需要根據業務情況進行處理。設想的處理方式有2種,我們則采用第一種方案:
1)根據原定文件路徑,創建相關文件夾,完成創建路徑所需的文件夾后,創建文件并寫入;
2)提示用戶,寫入路徑不存在;
創建文件夾的接口,下面會由講述。
三、文件讀取
文件讀取,也有相應的接口,例如:
let fd = fileio.openSync(path, 0o2);
let buf = new ArrayBuffer(4096);
// 異步方式1:promise形式返回結果
let res = await fileio.read(fd, buf); // 返回結果:Promise<Readout>
// 異步方式2:使用callback形式返回結果
await fileio.read(fd, buf, function (err, readOut) {
if (!err) {
console.log(String.fromCharCode.apply(null, new Uint8Array(readOut.buffer)))
}
});
// 同步方式
let num = fileio.readSync(fd, buf);
四、文件路徑判斷
讀取寫入之前,都需要判斷下文件路徑是否存在,那么可用下面這個接口判斷。
// 異步方式1:promise形式返回結果
fileio.access(path)
.then(function(err) {
// 文件存在,do something
}).catch(function(e) {
//若不符合條件則進入
});
// 異步方式2:使用callback形式返回結果
fileio.access(path, function (err) {
});
// 同步方式
try {
/**
* path:待訪問文件的絕對路徑。
* mode:確認當前進程是否具有對應權限:
0:確認文件是否存在。
1:確認當前進程是否具有可執行權限。
2:確認當前進程是否具有寫權限。
4:確認當前進程是否具有讀權限。
**/
fileio.accessSync(path, mode);
} catch(e) {
//不符合條件則進入
}
五、創建文件夾
創建文件夾的方法如下,如果需要設置文件夾的訪問權限,可以設置mode參數值:
// 異步方式1:promise形式創建文件夾
await fileio.mkdir(path, mode)
.then(function(err) {
// 目錄創建成功,do something
}).catch(function (e){
});
// 異步方式2:使用callback形式創建文件夾
await fileio.mkdir(path, mode, function(err) {
if (!err) {
// do something
}
});
// 同步方式創建文件夾
fileio.mkdirSync(path, mode);
六、個人總結
本次分享的內容僅是文件管理模塊學習研究的開端,希望與大家共同成長。
??https://harmonyos.51cto.com??