Flutter开发之——文件系统目录pathprovider,997页手淘Android面试真题解析火爆全网

Posted m0_66264673

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flutter开发之——文件系统目录pathprovider,997页手淘Android面试真题解析火爆全网相关的知识,希望对你有一定的参考价值。

  • ios上,此功能会抛出UnsupportedError,因为这是不可能的在应用程序的沙箱外部访问

  • android上,对应Context.getExternalFilesDirs(String type)或API Level 低于19的Context.getExternalFilesDir(String type)

3.8 getDownloadsDirectory

  • 存储下载文件的目录的路径,这通常仅与台式机操作系统有关

  • 在Android和iOS上,此函数将引发[UnsupportedError]异常。

四 示例


4.1 代码

Future<Directory?>? _tempDirectory;

Future<Directory?>? _appSupportDirectory;

Future<Directory?>? _appLibraryDirectory;

Future<Directory?>? _appDocumentsDirectory;

Future<Directory?>? _externalDocumentsDirectory;

Future<List?>? _externalStorageDirectories;

Future<List?>? _externalCacheDirectories;

Future<Directory?>? _downloadDirectory;

void _requestTempDirectory()

setState(()

_tempDirectory = getTemporaryDirectory();

);

Widget _buildDirectory(BuildContext context, AsyncSnapshot<Directory?> snapshot)

Text text = const Text(’’);

if (snapshot.connectionState == ConnectionState.done)

if (snapshot.hasError)

text = Text(‘Error: $snapshot.error’);

else if (snapshot.hasData)

text = Text(‘path: $snapshot.data!.path’);

else

text = const Text(‘path unavailable’);

return Padding(padding: const EdgeInsets.all(16.0), child: text);

Widget _buildDirectories(BuildContext context, AsyncSnapshot<List?> snapshot)

Text text = const Text(’’);

if (snapshot.connectionState == ConnectionState.done)

if (snapshot.hasError)

text = Text(‘Error: $snapshot.error’);

else if (snapshot.hasData)

final String combined = snapshot.data!.map((Directory d) => d.path).join(’, ');

text = Text(‘paths: $combined’);

else

text = const Text(‘path unavailable’);

return Padding(padding: const EdgeInsets.all(16.0), child: text);

void _requestAppDocumentsDirectory()

setState(()

_appDocumentsDirectory = getApplicationDocumentsDirectory();

);

void _requestAppSupportDirectory()

setState(()

_appSupportDirectory = getApplicationSupportDirectory();

);

void _requestAppLibraryDirectory()

setState(()

_appLibraryDirectory = getLibraryDirectory();

);

void _requestExternalStorageDirectory()

setState(()

_externalDocumentsDirectory = getExternalStorageDirectory();

);

void _requestExternalStorageDirectories(StorageDirectory type)

setState(()

_externalStorageDirectories = getExternalStorageDirectories(type: type);

);

void _requestExternalCacheDirectories()

setState(()

_externalCacheDirectories = getExternalCacheDirectories();

);

void _requestDownloadDirectory()

setState(()

_downloadDirectory = getDownloadsDirectory();

);

Center(

child: ListView(

children: [

Padding(padding: const EdgeInsets.all(16.0), child: ElevatedButton(child: const Text(‘Get Temporary Directory’), onPressed: _requestTempDirectory,),),

FutureBuilder<Directory?>(future: _tempDirectory, builder: _buildDirectory),

Padding(padding: const EdgeInsets.all(16.0), child: ElevatedButton(child: const Text(‘Get Application Documents Directory’),

onPressed: _requestAppDocumentsDirectory,),),

FutureBuilder<Directory?>(future: _appDocumentsDirectory, builder: _buildDirectory),

Padding(padding: const EdgeInsets.all(16.0), child: ElevatedButton(child: const Text(‘Get Application Support Directory’),

onPressed: _requestAppSupportDirectory,),),

FutureBuilder<Directory?>(future: _appSupportDirectory, builder: _buildDirectory),

Padding(padding: const EdgeInsets.all(16.0), child: ElevatedButton(child: const Text(‘Get Application Library Directory’),

onPressed: _requestAppLibraryDirectory,)),

FutureBuilder<Directory?>(future: _appLibraryDirectory, builder: _buildDirectory),

尾声

如果你想成为一个优秀的 Android 开发人员,请集中精力,对基础和重要的事情做深度研究。

对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。 整理的这些架构技术希望对Android开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。

这里,笔者分享一份从架构哲学的层面来剖析的视频及资料分享给大家梳理了多年的架构经验,筹备近6个月最新录制的,相信这份视频能给你带来不一样的启发、收获。

Android进阶学习资料库

一共十个专题,包括了Android进阶所有学习资料,Android进阶视频,Flutter,java基础,kotlin,NDK模块,计算机网络,数据结构与算法,微信小程序,面试题解析,framework源码!

大厂面试真题

PS:之前因为秋招收集的二十套一二线互联网公司Android面试真题 (含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)

《2019-2021字节跳动Android面试历年真题解析》

**

使用 CFile 的子类 CStdioFile 的注意事项 2

昨天使用Open是因为不熟悉mode而浪费了时间,所以这里记录一下。

需求是文件如果存在则直接打开,文件如果不存在则新建。

一开始直接这样写的:

CString strPath, strReadLine;
TCHAR PathPro[256] = {0};
GetCurrentDirectoryW(256,PathPro);              //PathPro :current path
strPath = CString(PathPro)+_T("\") + FileName; //strPath :absolute path

CStdioFile cfile;
cfile.Open(strPath,CFile::modeCreate|CFile::modeReadWrite);    
while(cfile.ReadString(strReadLine))
{
    ...
}

效果是文件如果存在则直接清空,后来又认真看了一下每种mode的用法。

modeCreate:以新建方式打开,如果文件不存在,新建;如果文件已存在,把该文件长度置零,即清除文件原有内容。

modeNoTruncate:以追加方式打开,如果文件存在,打开并且不将文件长度置零,如果文件不存在,会抛出异常。一般与CFile::modeCreate一起使用,则文件不存在时,新建一个文件;存在就进行追加操作。

modeReadWrite:以读写方式打开文件。

modeRead:只读。

modeWrite:只写。

换成这种方式打开就不会有问题了。

cfile.Open(strPath,CFile::modeCreate|CFile::modeNoTruncate|CFile::modeReadWrite);

实现效果是文件如果不存在则新建,如果存在则不清空文件以读写方式打开。

 

以上是关于Flutter开发之——文件系统目录pathprovider,997页手淘Android面试真题解析火爆全网的主要内容,如果未能解决你的问题,请参考以下文章

使用 CFile 的子类 CStdioFile 的注意事项 2

见识不一样的Flutter 之原生混合开发

Flutter(6):基础组件之Image

移动端开发之 Flutter APP 开发初体验

Flutter之国际化多语言

Flutter 到底能不能成为“跨平台开发终极之选”?