鸿蒙在 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;
}
}
}