基本概念
文件系统
使用设备文件系统
使用 @nativescript/core 进行文件系统处理提供了易于使用的 API,用于处理设备文件系统中的文件和文件夹,例如管理文件、文件夹、路径和分隔符等。
如何使用文件和文件夹
访问文档文件夹
要获取根文档文件夹,请在 knownFolders
上调用 documents()
方法
import { knownFolders } from '@nativescript/core'
const documents = knownFolders.documents()
访问临时(缓存)文件夹
import { knownFolders } from '@nativescript/core'
const cache = knownFolders.temp()
访问应用程序的根文件夹
import { knownFolders } from '@nativescript/core'
const appRootFolder = knownFolders.currentApp()
创建文件夹
要创建文件夹,请在 Folder
实例(上面的任何根文件夹或您创建的文件夹)上调用 getFolder()
方法,并将文件夹的名称传递给它。
folder.getFolder('folder-name')
您也可以使用 fromPath 的 Folder 类静态方法。
const folderPath = path.join(knownFolders.documents().path, 'music')
const folder: Folder = Folder.fromPath(folderPath)
重命名文件夹
要重命名文件夹,请使用 rename
或 renameSync
方法
folder
.rename(newName)
.then((res) => {
// Folder Successfully renamed.
})
.catch((err) => {
//Folder couldn't be renamed
console.error(err)
})
检查文件夹是否存在
const folderExists: boolean = Folder.exists('folder-path')
访问文件夹的内容
要获取文件夹的文件和文件夹,请使用 getEntitiesSync
或 getEntities
方法
folder
.getEntities()
.then((entities: FileSystemEntity[]) => {
// do something
})
.catch((err) => {
console.log(err)
})
删除文件夹的内容
要删除文件夹的所有内容,请使用 Folder 实例的 clear 或 clearSync 方法
folder
.clear()
.then((result) => {
// successful delete
})
.catch((rerror) => {})
// OR
folder.clearSync((error) => {})
删除文件夹
要删除文件夹,请使用 remove
或 removeSync
方法
folder
.remove()
.then((value: boolean) => {
console.log(value)
})
.catch((error) => {
console.error(error.message)
})
创建、写入和读取文本文件
- 要创建文件,请在
Folder
类的实例上调用getFile()
方法,并将带有扩展名的文件名传递给它。
folder.getFile('my-text.txt')
//or
const filePath = path.join(folder.path, 'my-text.txt')
const file = File.fromPath(filePath)
- 要将文本保存到文件,请使用
writeText
或writeTextSync
方法
file
.writeText('Some text')
.then((result) => {
// Succeeded writing to the file.
})
.catch((error) => {
console.log(error)
})
- 要从文本文件中提取数据,可以使用文件的 readText 或 readTextSync 方法。以下是如何使用它的示例
file
.readText()
.then((res) => {
// Succeeded read from file.
})
.catch((error) => {})
检查文件是否存在
要检查文件是否存在,可以使用 exists 以及文件路径
const exists = File.exists(filePath)
重命名文件
要重命名文件,请使用 rename
或 renameSync
方法
file
.rename('new-name.ext')
.then((value) => {})
.catch((err) => {})
将二进制数据保存到文件
要将二进制数据保存到文件,请使用 write
或 writeSync
方法
file
.write(binary data)
.then(result => {
// Succeeded writing to the file.
})
.catch(error => {
console.log(error)
})
从文件读取二进制数据
要读取二进制数据,请使用 File 实例的 read
或 readSync
方法。例如,您可以将图像保存到设备并将其检索,如下所示
async readAnImage() {
const folder = knownFolders.documents()
const filePath = path.join(folder.path, 'cat.png')
const imageFile = File.fromPath(filePath)
try {
const imageSource = await ImageSource.fromFile('~/assets/images/download.jpeg')
const saved: boolean = imageSource.saveToFile(filePath, "png")
if (saved) {
// READ BINARY DATA
const imageBinary = await imageFile.read()
const img = await ImageSource.fromData(imageBinary)
}
} catch (err) {
}
}
删除文件
要删除文件,请使用 File 实例的 remove 或 removeSync 方法
file
.remove()
.then((res: boolean) => {
// Success removing the file.
})
.catch((err) => {})
规范化路径
要规范化路径,请使用 normalize
或使用 path 对象中的 join
方法创建路径
const testPath = '///test.txt'
let documentsFolder = knownFolders.documents()
path.normalize(documentsFolder.path + testPath)
文件系统 API
documents()
const folder: Folder = knownFolders.documents()
获取当前应用程序可用的文档文件夹。此文件夹对应用程序私有,用户/外部应用程序无法访问。
externalDocuments()
const folder: Folder = knownFolders.externalDocuments()
从外部存储源获取当前应用程序可用的文档文件夹。此文件夹具有私有访问权限,其可用性仅限于应用程序,这意味着它无法被外部用户、机器人或外部应用程序访问。
- 在 Android 上,对于此类读写访问,需要将标志
READ_EXTERNAL_STORAGE/WRITE_EXTERNAL_STORAGE
权限设置为 true。这可以通过将以下 XML 代码添加到AndroidManifest.xml
文件来完成
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
- iOS 上没有外部存储,它与 documents() 相同。
temp()
const folder: Folder = knownFolders.temp()
获取当前应用程序可用的临时(缓存)文件夹。此文件夹对应用程序私有,用户/外部应用程序无法访问。
currentApp()
const folder: Folder = knownFolders.currentApp()
获取当前应用程序的根文件夹。
iOS 已知文件夹
以下方法允许访问 iOS 已知文件夹。
library()
const folder: Folder = knownFolders.ios.library()
获取 NSLibraryDirectory。
developer()
const folder: Folder = knownFolders.ios.developer()
获取 NSDeveloperDirectory。
desktop()
const folder: Folder = knownFolders.ios.desktop()
获取 NSDesktopDirectory。
downloads()
const folder: Folder = knownFolders.ios.downloads()
获取 NSDownloadsDirectory。
movies()
const folder: Folder = knownFolders.ios.movies()
获取 NSMoviesDirectory。
music()
const folder: Folder = knownFolders.ios.music()
获取 NSMusicDirectory。
pictures()
const folder: Folder = knownFolders.ios.pictures()
获取 NSPicturesDirectory。
sharedPublic()
const folder: Folder = knownFolders.ios.sharedPublic()
获取 NSSharedPublicDirectory。
fromPath()
const file: File = File.fromPath(path)
或
const folder: Folder = Folder.fromPath(path)
获取或创建指定路径上的 Folder 或 File 实体。
getFolder
const folder: Folder = folder.getFolder(name)
获取或创建具有指定 name
的 Folder 实体,该实体位于 Folder 中。
exists
const folderExists: boolean = Folder.exists(path)
或
const file: boolean = File.exists(path)
检查指定路径的 Folder 或 File 是否已存在。
isKnown
const isItAKnownFolder: boolean = folder.isKnown
确定此实例是否为已知文件夹(通过 knownFolders
对象访问)。
File 和 Folder 类都扩展了 FileSystemEntity,它具有以下 API
lastModified
const lastModified: Date = entity.lastModified
获取指定此实体上次修改时间的 Date 对象。
name
const name: string = entity.name
获取实体的名称。
path
const path: string = entity.path
获取实体的完全限定路径(包括 File 的扩展名)。
parent
const parent: Folder = entity.parent
获取代表此实体父级的 Folder 对象。对于 Documents 或 Temporary 等根文件夹,将为 null。此属性为只读。
remove()
const result = await entity.remove()
异步地从文件系统中删除(删除)当前实体。
removeSync()
entity.removeSync(onError?: (error: any) => any): void
从文件系统中删除(删除)当前实体。
rename()
entity.rename(newName: string): Promise<any>
异步地使用指定名称重命名当前实体。
renameSync()
entity.renameSync(newName: string, onError?: (error: any) => any)
使用指定名称同步重命名当前实体。
getEntities()
folder.getEntities(): Promise<Array<FileSystemEntity>>
异步获取驻留在文件夹中的所有顶级实体。
getEntitiesSync()
folder.getEntitiesSync(onError?: (error: any) => any): Array<FileSystemEntity>
同步获取驻留在该文件夹中的所有顶级实体。onError
是一个可选函数,如果发生错误,将调用该函数。
eachEntity()
folder.eachEntity(onEntity: (entity: FileSystemEntity) => boolean)
枚举文件夹中的所有顶级 FileSystem 实体。onEntity
是一个回调函数,它接收当前实体。
getFile()
folder.getFile(name: string): File
获取或创建此文件夹中指定名称的 File 实体。
extension
const fileExt: string = file.extension
获取文件的扩展名。
size
const fileSize: number = file.size
获取文件的扩展名。
isLocked
const isFileLocked: boolean = file.isLocked
获取一个布尔值,指示文件当前是否被锁定,这意味着与该文件关联的后台操作正在运行。
readText()
const text = await file.readText(encoding)
异步读取文件内容作为字符串,使用可选的编码值。如果您没有传递任何编码,则使用 UTF-8
。
readTextSync()
file.readTextSync(onError?: (error: any) => any, encoding?: string): string
同步读取文件内容作为字符串,使用指定的编码(默认为 UTF-8)。onError
是一个函数,如果发生一些 IO 错误,则调用该函数。
read
const fileContent = await file.read()
异步读取文件的二进制内容。
readSync()
const fileContent = file.readSync(onError)
同步读取文件的二进制内容。onError
是一个函数,如果发生一些 IO 错误,则调用该函数。
参数 | 类型 | 描述 |
---|---|---|
onError? | (error: any) => any | 一个可选函数,如果发生一些 IO 错误,则调用该函数。 |
writeText()
const result = await file.writeText(content, encoding)
异步将文件内容作为字符串写入,使用指定的编码(默认为 UTF-8)。
参数 | 类型 | 描述 |
---|---|---|
content | string | 要写入的内容。 |
encoding? | string | 一个可选的编码值。如果您没有传递任何编码,则使用 UTF-8 。 |
writeTextSync()
file.writeTextSync(content, onError, encoding): void
同步将文件内容作为字符串写入,使用指定的编码(默认为 UTF-8)。
参数 | 类型 | 描述 |
---|---|---|
content | string | 要写入的内容。 |
onError? | (error: any) => any | 一个可选函数,如果发生一些 IO 错误,则调用该函数。 |
encoding? | string | 一个可选的编码值。如果您没有传递任何编码,则使用 UTF-8 。 |
write()
await file.write(content)
异步将提供的二进制内容写入文件。
参数 | 类型 | 描述 |
---|---|---|
content | any | 要写入的内容。 |
writeSync()
file.writeSync(content: any, onError?: (error: any) => any): void
同步将提供的二进制内容写入文件。
参数 | 类型 | 描述 |
---|---|---|
content | any | 要写入的内容。 |
onError? | (error: any) => any | 一个可选函数,如果发生一些 IO 错误,则调用该函数。 |
contains()
const containsEntity: boolean = folder.contains(name)
检查此文件夹是否包含具有指定名称的实体。
参数 | 类型 | 描述 |
---|---|---|
name | string | 要检查的实体的名称。 |
clear()
const result = await folder.clear()
异步删除文件夹中包含的所有文件和文件夹(递归)。
clearSync()
folder.clearSync(onError)
同步删除文件夹中包含的所有文件和文件夹(递归)。
参数 | 类型 | 描述 |
---|---|---|
onError? | (error: any) => any | 一个可选函数,如果发生一些 IO 错误,则调用该函数。 |
path operations
normalize
const normalizedPath: string = path.normalize(path)
规范化路径,处理 ..
和 //
等情况。
参数 | 类型 | 描述 |
---|---|---|
path | string | 要规范化的路径。 |
join()
const joinedPath: string = path.join(...paths)
将所有提供的字符串组件连接起来,形成一个有效且规范化的路径。
参数 | 类型 | 描述 |
---|---|---|
paths | string[] | 要连接的路径的组件。 |
separator
pathSeparator: string = path.separator
获取用于分隔文件路径的字符串。
API References
- File 类
- Folder 类
- FileSystemEntity 类
- knownFolders 模块
- path 模块
Native Component
Android: java.io.File
iOS: NSFileManager