Operazioni sul file system
Impari a leggere e scrivere nel file system del dispositivo, consentendo di archiviare file di grandi dimensioni e formati di dati personalizzati.
Operazioni sul file system è una lezione Flutter Mobile Development gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Flutter Mobile Development, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Flutter Mobile Development include 4 lezioni in totale.
Parti di questa lezione non sono ancora state tradotte e vengono mostrate in inglese.
Storing Data in Files
Sometimes, your app needs to store data directly on the device. This is where file system operations come in! Unlike shared_preferences (for small key-value data) or sqflite (for structured data), file system operations allow you to manage files directly.
You can store larger pieces of data, like images, audio, or custom formatted text files, that don't fit well into a database or simple key-value pairs.
Where to Store Files?
Before you can read or write files, your app needs to know where it can store them. Flutter provides the path_provider package to help you find common directory paths safely across different platforms (iOS, Android, web, desktop).
- Application Documents Directory: This is where your app can store user-specific data that should persist.
- Temporary Directory: For data that doesn't need to persist across app launches, like cached files.
Getting Application Path
Let's use path_provider to get the application documents directory. Remember to add path_provider to your pubspec.yaml first!
dependencies:
flutter:
sdk: flutter
path_provider: ^2.0.11
import 'dart:io';
import 'package:path_provider/path_provider.dart';
void main() async {
// Get the application documents directory
Directory appDocDir = await getApplicationDocumentsDirectory();
String appDocPath = appDocDir.path;
print('App Documents Path: $appDocPath');
}Creating a File Reference
Once you have a directory path, you can create a File object. This object represents the file at that specific path on the device's storage. It doesn't mean the file actually exists yet, it's just a reference.
You'll combine the directory path with your desired filename to construct the full file path.
Constructing a File Path
Here's how you can combine the application documents path with a filename to create a File object. We'll use a simple text file name for our example.
import 'dart:io';
import 'package:path_provider/path_provider.dart';
void main() async {
Directory appDocDir = await getApplicationDocumentsDirectory();
String appDocPath = appDocDir.path;
// Define a filename
String fileName = 'my_data.txt';
// Create a File object
File file = File('$appDocPath/$fileName');
print('File path reference created: ${file.path}');
// At this point, the file might not exist on disk yet.
}Saving Content to Files
The File object provides methods to write data. The most common ones are writeAsString() for text and writeAsBytes() for binary data. These operations are asynchronous, so you'll use await.
writeAsString(String contents, {FileMode mode = FileMode.write}): Writes text.FileMode.writeoverwrites,FileMode.appendadds to the end.writeAsBytes(List<int> bytes, {FileMode mode = FileMode.write}): Writes raw bytes.
Writing a Simple Text File
Let's write some text content to our my_data.txt file. If the file doesn't exist, writeAsString will create it. If it does exist, it will overwrite its content by default.
import 'dart:io';
import 'package:path_provider/path_provider.dart';
void main() async {
Directory appDocDir = await getApplicationDocumentsDirectory();
String appDocPath = appDocDir.path;
String fileName = 'my_data.txt';
File file = File('$appDocPath/$fileName');
String content = 'Hello, CoddyKit learners!\nThis is a test message.';
try {
await file.writeAsString(content);
print('Content written to ${file.path}');
print('File exists: ${await file.exists()}');
} catch (e) {
print('Error writing file: $e');
}
}Reading Content from Files
Just as you can write, you can also read content back from files. The readAsString() method is perfect for text files, while readAsBytes() is used for binary data.
It's good practice to check if a file exists() before trying to read from it to prevent errors.
Reading a File's Content
Now, let's read the content we just wrote back from my_data.txt. We'll first check if the file exists to be safe.
import 'dart:io';
import 'package:path_provider/path_provider.dart';
void main() async {
Directory appDocDir = await getApplicationDocumentsDirectory();
String appDocPath = appDocDir.path;
String fileName = 'my_data.txt';
File file = File('$appDocPath/$fileName');
if (await file.exists()) {
try {
String content = await file.readAsString();
print('Content read from ${file.path}:\n$content');
} catch (e) {
print('Error reading file: $e');
}
} else {
print('File does not exist: ${file.path}');
}
}Removing Files
When data is no longer needed, you can delete files from the device's storage. The delete() method on a File object will remove it. This operation is also asynchronous.
Be careful when deleting files, as this action is usually irreversible!
Check Your Understanding
Which of the following statements about Flutter file system operations are TRUE?
Lesson Summary
Great job! In this lesson, you've learned how to interact with the device's file system in Flutter:
- Used
path_providerto find appropriate storage directories. - Created
Fileobjects to reference specific files. - Wrote content to files using
writeAsString(). - Read content from files using
readAsString(). - Understood how to delete files with
delete().
File system operations are crucial for storing large, custom-formatted, or sensitive data directly on the device. Next, you can explore more advanced data handling or move on to other Flutter topics!
Domande Frequenti
La lezione «Operazioni sul file system» è gratuita?
Sì — il testo completo di «Operazioni sul file system» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Flutter Mobile Development, passa a CoddyKit PRO. Il corso Flutter Mobile Development include 4 lezioni in totale.
Cosa imparerò in «Operazioni sul file system»?
Impari a leggere e scrivere nel file system del dispositivo, consentendo di archiviare file di grandi dimensioni e formati di dati personalizzati. Eserciti Flutter Mobile Development con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Flutter Mobile Development?
Non è richiesta alcuna esperienza precedente. Flutter Mobile Development su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.
Quanto tempo richiede la lezione «Operazioni sul file system»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Flutter Mobile Development?
Sì. Ogni lezione Flutter Mobile Development include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Shared Preferences per i dati
- Integrazione di database SQLite
- Operazioni sul file system
- Hive e archiviazione locale NoSQL