
package:path_provider
一个能使用本地文件系统的插件,比如获取缓存区域文件夹等。 支持全平台,但是部分功能针对于不同的平台有限制
功能:
功能: 1.读取文件 2. 或者文件地址等 |Directory |Android | iOS | Linux |macOS |Windows | Temporary ?? ?? ?? ?? ?? Application Support ?? ?? ?? ?? ?? Application Library ?? ?? ?? ?? ?? Application Documents ?? ?? ?? ?? ?? External Storage ?? ? ? ?? ?? External Cache Directories ?? ? ? ?? ?? External Storage Directories ?? ? ? ?? ?? Downloads ? ? ?? ?? ??
使用实例和代码:
Future<String> _getTemporaryDirectory() async {
final dir = await getTemporaryDirectory();
return dir.toString();
}
Future<String> _getApplicationSupportDirectory() async {
final dir = await getApplicationSupportDirectory();
return dir.toString();
}
Future<String> _getLibraryDirectory() async {
final dir = await getLibraryDirectory();
return dir.toString();
}
Future<String> _getApplicationDocumentsDirectory() async {
final dir = await getApplicationDocumentsDirectory();
return dir.toString();
}
Future<String> _getExternalStorageDirectory() async {
final dir = await getExternalStorageDirectory();
return dir.toString();
}
Future<String> _getExternalCacheDirectories() async {
final dir = await getExternalCacheDirectories();
return dir.toString();
}
Future<String> _getDownloadsDirectory() async {
final dir = await getDownloadsDirectory();
return dir.toString();
}
获取DocumentsDirectory文件的具体地址,并插件一个txt文件
Future<File> getFile(String str) async {
final dir = await getApplicationDocumentsDirectory();
debugPrint('$dir'.toString());
String filepath = "${dir.path}\\${str}.txt";
debugPrint("filepath $filepath");
File file = File(filepath);
if (!file.existsSync()) {
file.createSync();
debugPrint('create success');
}
return File(filepath);
}
读取文件并写入,mode: FileMode.append不覆盖
Future<void> dowritestr(String str) async {
final file = await getFile("test");
file.writeAsStringSync('JACK', mode: FileMode.append);
file.writeAsStringSync('TOm', mode: FileMode.append);
debugPrint('success');
}
获取文件并读取
Future<String> doread(String str) async {
final file = await getFile("test");
debugPrint('success');
return file.readAsString();
}
代码:
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// ignore_for_file: public_member_api_docs
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:path_provider/path_provider.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Path Provider',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: const MyHomePage(title: 'Path Provider'),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({Key? key, required this.title}) : super(key: key);
final String title;
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
String addstr = '这边显示文档的位置';
Future<String> _getTemporaryDirectory() async {
final dir = await getTemporaryDirectory();
return dir.toString();
}
Future<String> _getApplicationSupportDirectory() async {
final dir = await getApplicationSupportDirectory();
return dir.toString();
}
Future<String> _getLibraryDirectory() async {
final dir = await getLibraryDirectory();
return dir.toString();
}
Future<String> _getApplicationDocumentsDirectory() async {
final dir = await getApplicationDocumentsDirectory();
return dir.toString();
}
Future<String> _getExternalStorageDirectory() async {
final dir = await getExternalStorageDirectory();
return dir.toString();
}
Future<String> _getExternalCacheDirectories() async {
final dir = await getExternalCacheDirectories();
return dir.toString();
}
Future<String> _getDownloadsDirectory() async {
final dir = await getDownloadsDirectory();
return dir.toString();
}
/*
读写磁盘的操作
**/
//获取到文件
Future<File> getFile(String str) async {
final dir = await getApplicationDocumentsDirectory();
debugPrint('$dir'.toString());
String filepath = "${dir.path}\\${str}.txt";
debugPrint("filepath $filepath");
// Directory newdirectory = Directory(filepath);//文件夹也可以创建
File file = File(filepath);
if (!file.existsSync()) {
//判断是否存在文件,如果不存在就创建他,异步创建
file.createSync();
debugPrint('create success');
}
return File(filepath);
}
Future<void> dowritestr(String str) async {
final file = await getFile("test");
//append 不覆盖添加
file.writeAsStringSync('JACK', mode: FileMode.append);
file.writeAsStringSync('TOm', mode: FileMode.append);
debugPrint('success');
}
Future<String> doread(String str) async {
final file = await getFile("test");
//append 不覆盖添加
debugPrint('success');
return file.readAsString();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: ListView(
padding: EdgeInsets.all(10),
children: [
Center(child: Text(addstr)),
Container(
margin: EdgeInsets.all(10),
child: ElevatedButton(
onPressed: () async {
String newadd = await _getTemporaryDirectory();
setState(() {
addstr = newadd;
});
},
child: const Text('获取应用临时目录(全平台支持)getTemporaryDirectory')),
),
Container(
margin: EdgeInsets.all(10),
child: ElevatedButton(
onPressed: () async {
String newadd = await _getApplicationSupportDirectory();
setState(() {
addstr = newadd;
});
},
child: const Text(
'获取应用程序支持目录(全平台支持)getApplicationSupportDirectory')),
),
Container(
margin: EdgeInsets.all(10),
child: ElevatedButton(
onPressed: () async {
if (Platform.isMacOS || Platform.isMacOS) {
String newadd = await _getLibraryDirectory();
addstr = newadd;
} else {
String newadd = '不支持';
addstr = newadd;
}
setState(() {});
},
child: const Text('获取程序持久文件目录(ios macos)getLibraryDirectory')),
),
Container(
margin: EdgeInsets.all(10),
child: ElevatedButton(
onPressed: () async {
String newadd = await _getApplicationDocumentsDirectory();
addstr = newadd;
setState(() {});
},
child: const Text(
'获取应用文档目录(全平台)getApplicationDocumentsDirectory')),
),
Container(
margin: EdgeInsets.all(10),
child: ElevatedButton(
onPressed: () async {
if (Platform.isAndroid) {
String newadd = await _getExternalStorageDirectory();
addstr = newadd;
} else {
String newadd = '不支持';
addstr = newadd;
}
setState(() {});
},
child: const Text(
'获取外部存储目录(only android)getExternalStorageDirectory')),
),
Container(
margin: EdgeInsets.all(10),
child: ElevatedButton(
onPressed: () async {
if (Platform.isAndroid) {
String newadd = await _getExternalCacheDirectories();
addstr = newadd;
} else {
String newadd = '不支持';
addstr = newadd;
}
setState(() {});
},
child: const Text(
'获取外部缓存目录(only android)getExternalCacheDirectories')),
),
Container(
margin: EdgeInsets.all(10),
child: ElevatedButton(
onPressed: () async {
if (Platform.isAndroid) {
String newadd = await _getExternalStorageDirectory();
addstr = newadd;
} else {
String newadd = '不支持';
addstr = newadd;
}
setState(() {});
},
child: const Text(
'外部存储目录(单独分区)(only android)getExternalStorageDirectory')),
),
Container(
margin: EdgeInsets.all(10),
child: ElevatedButton(
onPressed: () async {
if (Platform.isLinux ||
Platform.isMacOS ||
Platform.isWindows) {
String newadd = await _getDownloadsDirectory();
addstr = newadd;
} else {
String newadd = '不支持';
addstr = newadd;
}
setState(() {});
},
child: const Text(
'获取下载文件存储目录地址(only Linux,MacOS,Windows)getDownloadsDirectory')),
),
Container(
margin: EdgeInsets.all(10),
child: ElevatedButton(
onPressed: () async {
dowritestr('TEST');
},
child: const Text('写入数据的操作')),
),
Container(
margin: EdgeInsets.all(10),
child: ElevatedButton(
onPressed: () async {
String retxt = await doread('TEST');
setState(() {
addstr = retxt;
});
},
child: const Text('读取数据')),
),
],
)),
);
}
}
截图:

|