Flutter使用path_provider获取文件路径

有些时候,我们需要保存一些数据在app的目录中。这个时候我们就需要使用path_provider 获取文件路径。

安装

pubspec.yaml

dependencies:
  path_provider: ^latest_version

使用

getTemporaryDirectory

临时目录,适用于下载的缓存文件,此目录随时可以清除。

此目录为应用程序私有目录,其他应用程序无法访问此目录。

Android 上对应getCacheDir;iOS上对应 NSCachesDirectory。

Directory dir = await getTemporaryDirectory();
return dir.path;

结果:

/data/user/0/com.ilgnefz.flutter_tools/cache

getApplicationSupportDirectory

应用程序可以在其中放置应用程序支持文件的目录的路径。

将此文件用于您不想向用户公开的文件, 您的应用不应将此目录用于存放用户数据文件。

在iOS上,对应 NSApplicationSupportDirectory ,如果此目录不存在,则会自动创建;在Android上,对应 getFilesDir。

Directory dir = await getApplicationSupportDirectory();
return dir.path;

结果:

/data/user/0/com.ilgnefz.flutter_tools/files

getLibraryDirectory

应用程序可以在其中存储持久性文件,备份文件以及对用户不可见的文件的目录路径。

在Android上,此函数抛出 [UnsupportedError] 异常,没有等效项路径存在。

try {
  Directory dir = await getLibraryDirectory();
  return dir.path;
} catch (e) {
  return '此设备不受支持';
}

getApplicationDocumentsDirectory

应用程序可能在其中放置用户生成的数据或应用程序无法重新创建的数据的目录路径。

在iOS上,对应 NSDocumentDirectory API。 如果数据不是用户生成的,考虑使用 getApplicationSupportDirectory。

在Android上,对应 getDataDirectory API。 如果要让用户看到数据,考虑改用 getExternalStorageDirectory。

Directory dir = await getApplicationDocumentsDirectory();
return dir.path;

结果:

/data/user/0/com.ilgnefz.flutter_tools/app_flutter

getExternalStorageDirectory

应用程序可以访问顶级存储的目录的路径。
由于此功能仅在Android上可用,因此应在发出此函数调用之前确定当前操作系统。
在iOS上,此功能会引发 [UnsupportedError] 异常,因为无法在应用程序的沙箱外部访问。
在Android上,对应 getExternalFilesDir(null)。

try {
  Directory? dir = await getExternalStorageDirectory();
  return dir!.path;
} catch (e) {
  return '此设备不受支持';
}

结果:

/storage/emulated/0/Android/data/com.ilgnefz.flutter_tools/files

getExternalCacheDirectories

存储特定于应用程序的外部缓存数据的目录的路径。 这些路径通常位于外部存储(如单独的分区或SD卡)上。
由于此功能仅在Android上可用,因此应在发出此函数调用之前确定当前操作系统。
在iOS上,此功能会抛出 UnsupportedError,因为这是不可能的在应用程序的沙箱外部访问。
在Android上,对应 Context.getExternalCacheDirs() 或API Level 低于19的 Context.getExternalCacheDir()。

try {
  List<Directory>? dir = await getExternalCacheDirectories();
  return dir.toString();
} catch (e) {
  return '此设备不受支持';
}

结果:

[
  Directory: '/storage/emulated/0/Android/data/com.ilgnefz.flutter_tools/cache'
]

getExternalStorageDirectories

可以存储应用程序特定数据的目录的路径。 这些路径通常位于外部存储(如单独的分区或SD卡)上。
由于此功能仅在Android上可用,因此应在发出此函数调用之前确定当前操作系统。
在iOS上,此功能会抛出UnsupportedError,因为这是不可能的在应用程序的沙箱外部访问。
在Android上,对应 Context.getExternalFilesDirs(String type) 或API Level 低于19的 Context.getExternalFilesDir(String type)。

try {
  List<Directory>? dir = await getExternalStorageDirectories();
  return dir.toString();
} catch (e) {
  return '此设备不受支持';
}

结果:

[
  Directory: '/storage/emulated/0/Android/data/com.ilgnefz.flutter_tools/files'
]

getDownloadsDirectory

存储下载文件的目录的路径,这通常仅与台式机操作系统有关。
在 Android 和 iOS 上,此函数将引发 [UnsupportedError] 异常。

try {
  Directory? dir = await getDownloadsDirectory();
  return dir!.path;
} catch (e) {
  return '此设备不受支持';
}

permission

posted @ 2022-03-10 17:22  菠萝橙子丶  阅读(3160)  评论(1编辑  收藏  举报