8.7 发布—WinterCG 兼容性第一部分
了解更多

使用 @nativescript/core 进行文件系统处理提供了易于使用的 API,用于处理设备文件系统中的文件和文件夹,例如管理文件、文件夹、路径和分隔符等。

如何使用文件和文件夹

访问文档文件夹

要获取根文档文件夹,请在 knownFolders 上调用 documents() 方法

ts
import { knownFolders } from '@nativescript/core'

const documents = knownFolders.documents()

访问临时(缓存)文件夹

ts
import { knownFolders } from '@nativescript/core'

const cache = knownFolders.temp()

访问应用程序的根文件夹

ts
import { knownFolders } from '@nativescript/core'

const appRootFolder = knownFolders.currentApp()

创建文件夹

要创建文件夹,请在 Folder 实例(上面的任何根文件夹或您创建的文件夹)上调用 getFolder() 方法,并将文件夹的名称传递给它。

ts
folder.getFolder('folder-name')

您也可以使用 fromPath 的 Folder 类静态方法。

ts
const folderPath = path.join(knownFolders.documents().path, 'music')
const folder: Folder = Folder.fromPath(folderPath)

重命名文件夹

要重命名文件夹,请使用 renamerenameSync 方法

ts
folder
  .rename(newName)
  .then((res) => {
    // Folder Successfully renamed.
  })
  .catch((err) => {
    //Folder couldn't be renamed
    console.error(err)
  })

检查文件夹是否存在

ts
const folderExists: boolean = Folder.exists('folder-path')

访问文件夹的内容

要获取文件夹的文件和文件夹,请使用 getEntitiesSyncgetEntities 方法

ts
folder
  .getEntities()
  .then((entities: FileSystemEntity[]) => {
    // do something
  })
  .catch((err) => {
    console.log(err)
  })

删除文件夹的内容

要删除文件夹的所有内容,请使用 Folder 实例的 clearclearSync 方法

ts
folder
  .clear()
  .then((result) => {
    // successful delete
  })
  .catch((rerror) => {})

// OR

folder.clearSync((error) => {})

删除文件夹

要删除文件夹,请使用 removeremoveSync 方法

ts
folder
  .remove()
  .then((value: boolean) => {
    console.log(value)
  })
  .catch((error) => {
    console.error(error.message)
  })

创建、写入和读取文本文件

  • 要创建文件,请在 Folder 类的实例上调用 getFile() 方法,并将带有扩展名的文件名传递给它。
ts
folder.getFile('my-text.txt')
//or
const filePath = path.join(folder.path, 'my-text.txt')
const file = File.fromPath(filePath)
  • 要将文本保存到文件,请使用 writeTextwriteTextSync 方法
ts
file
  .writeText('Some text')
  .then((result) => {
    // Succeeded writing to the file.
  })
  .catch((error) => {
    console.log(error)
  })
  • 要从文本文件中提取数据,可以使用文件的 readText 或 readTextSync 方法。以下是如何使用它的示例
ts
file
  .readText()
  .then((res) => {
    // Succeeded read from file.
  })
  .catch((error) => {})

检查文件是否存在

要检查文件是否存在,可以使用 exists 以及文件路径

ts
const exists = File.exists(filePath)

重命名文件

要重命名文件,请使用 renamerenameSync 方法

ts
file
  .rename('new-name.ext')
  .then((value) => {})
  .catch((err) => {})

将二进制数据保存到文件

要将二进制数据保存到文件,请使用 writewriteSync 方法

ts
file
  .write(binary data)
  .then(result => {
    // Succeeded writing to the file.

  })
  .catch(error => {
    console.log(error)
  })

从文件读取二进制数据

要读取二进制数据,请使用 File 实例的 readreadSync 方法。例如,您可以将图像保存到设备并将其检索,如下所示

ts
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 实例的 removeremoveSync 方法

ts
file
  .remove()
  .then((res: boolean) => {
    // Success removing the file.
  })
  .catch((err) => {})

规范化路径

要规范化路径,请使用 normalize 或使用 path 对象中的 join 方法创建路径

ts
const testPath = '///test.txt'
let documentsFolder = knownFolders.documents()
path.normalize(documentsFolder.path + testPath)

文件系统 API

documents()

ts
const folder: Folder = knownFolders.documents()

获取当前应用程序可用的文档文件夹。此文件夹对应用程序私有,用户/外部应用程序无法访问。


externalDocuments()

ts
const folder: Folder = knownFolders.externalDocuments()

从外部存储源获取当前应用程序可用的文档文件夹。此文件夹具有私有访问权限,其可用性仅限于应用程序,这意味着它无法被外部用户、机器人或外部应用程序访问。

  • 在 Android 上,对于此类读写访问,需要将标志 READ_EXTERNAL_STORAGE/WRITE_EXTERNAL_STORAGE 权限设置为 true。这可以通过将以下 XML 代码添加到 AndroidManifest.xml 文件来完成
xml
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
  • iOS 上没有外部存储,它与 documents() 相同。

temp()

ts
const folder: Folder = knownFolders.temp()

获取当前应用程序可用的临时(缓存)文件夹。此文件夹对应用程序私有,用户/外部应用程序无法访问。


currentApp()

ts
const folder: Folder = knownFolders.currentApp()

获取当前应用程序的根文件夹。


iOS 已知文件夹

以下方法允许访问 iOS 已知文件夹。

library()

ts
const folder: Folder = knownFolders.ios.library()

获取 NSLibraryDirectory。


developer()

ts
const folder: Folder = knownFolders.ios.developer()

获取 NSDeveloperDirectory。


desktop()

ts
const folder: Folder = knownFolders.ios.desktop()

获取 NSDesktopDirectory。


downloads()

ts
const folder: Folder = knownFolders.ios.downloads()

获取 NSDownloadsDirectory。


movies()

ts
const folder: Folder = knownFolders.ios.movies()

获取 NSMoviesDirectory。


music()

ts
const folder: Folder = knownFolders.ios.music()

获取 NSMusicDirectory。


pictures()

ts
const folder: Folder = knownFolders.ios.pictures()

获取 NSPicturesDirectory。


sharedPublic()

ts
const folder: Folder = knownFolders.ios.sharedPublic()

获取 NSSharedPublicDirectory。


fromPath()

ts
const file: File = File.fromPath(path)

ts
const folder: Folder = Folder.fromPath(path)

获取或创建指定路径上的 Folder 或 File 实体。


getFolder

ts
const folder: Folder = folder.getFolder(name)

获取或创建具有指定 name 的 Folder 实体,该实体位于 Folder 中。


exists

ts
const folderExists: boolean = Folder.exists(path)

ts
const file: boolean = File.exists(path)

检查指定路径的 Folder 或 File 是否已存在。


isKnown

ts
const isItAKnownFolder: boolean = folder.isKnown

确定此实例是否为已知文件夹(通过 knownFolders 对象访问)。


File 和 Folder 类都扩展了 FileSystemEntity,它具有以下 API

lastModified

ts
const lastModified: Date = entity.lastModified

获取指定此实体上次修改时间的 Date 对象。


name

ts
const name: string = entity.name

获取实体的名称。


path

ts
const path: string = entity.path

获取实体的完全限定路径(包括 File 的扩展名)。


parent

ts
const parent: Folder = entity.parent

获取代表此实体父级的 Folder 对象。对于 Documents 或 Temporary 等根文件夹,将为 null。此属性为只读。


remove()

ts
const result = await entity.remove()

异步地从文件系统中删除(删除)当前实体。


removeSync()

ts
entity.removeSync(onError?: (error: any) => any): void

从文件系统中删除(删除)当前实体。


rename()

ts
entity.rename(newName: string): Promise<any>

异步地使用指定名称重命名当前实体。


renameSync()

ts
entity.renameSync(newName: string, onError?: (error: any) => any)

使用指定名称同步重命名当前实体。


getEntities()

ts
folder.getEntities(): Promise<Array<FileSystemEntity>>

异步获取驻留在文件夹中的所有顶级实体。


getEntitiesSync()

ts
folder.getEntitiesSync(onError?: (error: any) => any): Array<FileSystemEntity>

同步获取驻留在该文件夹中的所有顶级实体。onError 是一个可选函数,如果发生错误,将调用该函数。


eachEntity()

ts
folder.eachEntity(onEntity: (entity: FileSystemEntity) => boolean)

枚举文件夹中的所有顶级 FileSystem 实体。onEntity 是一个回调函数,它接收当前实体。


getFile()

ts
folder.getFile(name: string): File

获取或创建此文件夹中指定名称的 File 实体。


extension

ts
const fileExt: string = file.extension

获取文件的扩展名。


size

ts
const fileSize: number = file.size

获取文件的扩展名。


isLocked

ts
const isFileLocked: boolean = file.isLocked

获取一个布尔值,指示文件当前是否被锁定,这意味着与该文件关联的后台操作正在运行。


readText()

ts
const text = await file.readText(encoding)

异步读取文件内容作为字符串,使用可选的编码值。如果您没有传递任何编码,则使用 UTF-8


readTextSync()

ts
file.readTextSync(onError?: (error: any) => any, encoding?: string): string

同步读取文件内容作为字符串,使用指定的编码(默认为 UTF-8)。onError 是一个函数,如果发生一些 IO 错误,则调用该函数。


read

ts
const fileContent = await file.read()

异步读取文件的二进制内容。


readSync()

ts
const fileContent = file.readSync(onError)

同步读取文件的二进制内容。onError 是一个函数,如果发生一些 IO 错误,则调用该函数。

参数类型描述
onError?(error: any) => any一个可选函数,如果发生一些 IO 错误,则调用该函数。

writeText()

ts
const result = await file.writeText(content, encoding)

异步将文件内容作为字符串写入,使用指定的编码(默认为 UTF-8)。

参数类型描述
contentstring要写入的内容。
encoding?string一个可选的编码值。如果您没有传递任何编码,则使用 UTF-8

writeTextSync()

ts
file.writeTextSync(content, onError, encoding): void

同步将文件内容作为字符串写入,使用指定的编码(默认为 UTF-8)。

参数类型描述
contentstring要写入的内容。
onError?(error: any) => any一个可选函数,如果发生一些 IO 错误,则调用该函数。
encoding?string一个可选的编码值。如果您没有传递任何编码,则使用 UTF-8

write()

ts
await file.write(content)

异步将提供的二进制内容写入文件。

参数类型描述
contentany要写入的内容。

writeSync()

ts
file.writeSync(content: any, onError?: (error: any) => any): void

同步将提供的二进制内容写入文件。

参数类型描述
contentany要写入的内容。
onError?(error: any) => any一个可选函数,如果发生一些 IO 错误,则调用该函数。

contains()

ts
const containsEntity: boolean = folder.contains(name)

检查此文件夹是否包含具有指定名称的实体。

参数类型描述
namestring要检查的实体的名称。

clear()

ts
const result = await folder.clear()

异步删除文件夹中包含的所有文件和文件夹(递归)。


clearSync()

ts
folder.clearSync(onError)

同步删除文件夹中包含的所有文件和文件夹(递归)。

参数类型描述
onError?(error: any) => any一个可选函数,如果发生一些 IO 错误,则调用该函数。

path operations

normalize

ts
const normalizedPath: string = path.normalize(path)

规范化路径,处理 ..// 等情况。

参数类型描述
pathstring要规范化的路径。

join()

ts
const joinedPath: string = path.join(...paths)

将所有提供的字符串组件连接起来,形成一个有效且规范化的路径。

参数类型描述
pathsstring[]要连接的路径的组件。

separator

ts
pathSeparator: string = path.separator

获取用于分隔文件路径的字符串。


API References

Native Component

Previous
Device