鸿蒙在 ETS (Extendable TypeScript) 中创建多级目录或文件,可以使用鸿蒙的文件系统 API。
import fs from '@ohos.file.fs'
;
const TAG="Index"
@Entry
@Component
struct Index {
@State message: string = 'Hello World'
;
build(
) {
Row(
) {
Column(
) {
Text(this.message)
.fontSize(50
)
.fontWeight(FontWeight.Bold)
Button("创建目录"
)
.margin({
top: 10
}
)
.onClick((
) =>
{
this.createDirsByRelativePath('path/to/your/dir'
)
;
}
)
Button("创建文件"
)
.margin({
top: 10
}
)
.onClick((
) =>
{
this.createFile('path/to/your/dir/a.txt'
)
;
}
)
}
.width('100%'
)
}
.height('100%'
)
}
async createFile(featurePath:string){
let mFeaturePath = ""
;
if (featurePath.indexOf("/"
) != -1
) {
let lastAIndex = featurePath.lastIndexOf('/'
)
;
let fFileDir: string = featurePath.slice(0
, lastAIndex)
;
let fileName: string = featurePath.slice(lastAIndex + 1
)
;
console.info(TAG, "arrPath:" + fFileDir)
;
if (fFileDir.length != 0
) {
await this.createDirsByRelativePath(fFileDir)
;
mFeaturePath = getContext(this).filesDir + fFileDir + "/" + fileName;
}
else {
mFeaturePath = getContext(this).filesDir + "/" + fileName;
}
}
else {
mFeaturePath = getContext(this).filesDir + "/" + featurePath;
}
console.info(TAG, "mFeaturePath:" + mFeaturePath)
;
}
async createMultiDirs(dirPath: string): Promise<
void>
{
try {
let isExist = await fs.access(dirPath)
;
if (isExist) {
console.info(`Directory already exists: ${
dirPath
}`)
;
return
;
}
} catch (err) {
}
const parentDir = dirPath.substring(0
, dirPath.lastIndexOf('/'
)
)
;
if (parentDir && parentDir !== '/' && parentDir !== ''
) {
try {
await this.createMultiDirs(parentDir)
;
} catch (err) {
console.error(`Failed to create parent directory: ${
parentDir
}
, error: ${
JSON.stringify(err)
}`)
;
}
}
try {
await fs.mkdir(dirPath)
;
console.info(`Directory created: ${
dirPath
}`)
;
} catch (err) {
if (err.code !== 13900015
) {
console.error(`Failed to create directory: ${
dirPath
}
, error: ${
JSON.stringify(err)
}`)
;
}
}
}
async createDirsByRelativePath(relativePath: string): Promise<
void>
{
const context = getContext(
)
;
const baseDir = context.filesDir;
const targetDir = baseDir + '/' + relativePath;
try {
await this.createMultiDirs(targetDir)
;
console.info('All directories created successfully.')
;
} catch (err) {
console.error(`Failed to create directories: ${
JSON.stringify(err)
}`)
;
}
}
async createDirs(basePath: string, relativePath: string): Promise<boolean>
{
const fullPath = basePath + '/' + relativePath;
try {
await fs.mkdir(fullPath)
;
console.info(`目录创建成功: ${
fullPath
}`)
;
return true;
} catch (error) {
console.error(`目录创建失败: ${
JSON.stringify(error)
}`)
;
return false;
}
}
async createFileWithPath(basePath: string, filePath: string, content: string = ''
): Promise<boolean>
{
const fullPath = basePath + '/' + filePath;
try {
const lastSlashIndex = filePath.lastIndexOf('/'
)
;
const dirPath = lastSlashIndex >
0 ? filePath.substring(0
, lastSlashIndex) : ''
;
if (dirPath) {
await this.createDirs(basePath, dirPath)
;
}
const file = await fs.open(fullPath, fs.OpenMode.CREATE | fs.OpenMode.READ_WRITE)
;
if (content) {
await fs.write(file.fd, content)
;
}
await fs.close(file.fd)
;
console.info(`文件创建成功: ${
fullPath
}`)
;
return true;
} catch (error) {
console.error(`文件创建失败: ${
JSON.stringify(error)
}`)
;
return false;
}
}
async fileExists(basePath: string, filePath: string): Promise<boolean>
{
const fullPath = basePath + '/' + filePath;
try {
await fs.access(fullPath)
;
return true;
} catch {
return false;
}
}
}