Dart IO Library
File system operations and input/output handling
📁 What is Dart IO Library?
Dart IO Library provides functionality for file system operations, network communication, and input/output handling. It enables reading/writing files, creating directories, and managing system resources efficiently.
import 'dart:io';
void main() async {
// Create and write to a file
File file = File('example.txt');
await file.writeAsString('Hello Dart IO!');
// Read from the file
String content = await file.readAsString();
print('File content: $content');
}
Output:
File content: Hello Dart IO!
IO Operations
File Operations
Read, write, and manage files
File file = File('data.txt');
await file.writeAsString('Hello');
String content = await file.readAsString();
Directory Operations
Create and manage directories
Directory dir = Directory('my_folder');
await dir.create();
bool exists = await dir.exists();
HTTP Client
Make network requests
HttpClient client = HttpClient();
HttpClientRequest request =
await client.getUrl(Uri.parse('https://api.example.com'));
Process Management
Run system processes
ProcessResult result =
await Process.run('ls', ['-la']);
print(result.stdout);
🔹 File Operations
Working with files - reading, writing, and managing:
import 'dart:io';
void main() async {
// Create a file
File file = File('sample.txt');
// Write to file
await file.writeAsString('Hello World!\nThis is line 2.');
print('File created and written');
// Read entire file
String content = await file.readAsString();
print('File content:\n$content');
// Read as lines
List lines = await file.readAsLines();
print('Number of lines: ${lines.length}');
for (int i = 0; i < lines.length; i++) {
print('Line ${i + 1}: ${lines[i]}');
}
// Append to file
await file.writeAsString('\nAppended line', mode: FileMode.append);
// Check file properties
FileStat stat = await file.stat();
print('File size: ${stat.size} bytes');
print('Modified: ${stat.modified}');
}
Output:
File created and written
File content:
Hello World!
This is line 2.
Number of lines: 2
Line 1: Hello World!
Line 2: This is line 2.
File size: 42 bytes
Modified: 2024-01-15 10:30:45.123
🔹 Directory Operations
Managing directories and listing contents:
import 'dart:io';
void main() async {
// Create directory
Directory myDir = Directory('my_project');
if (!await myDir.exists()) {
await myDir.create();
print('Directory created: ${myDir.path}');
}
// Create subdirectories
Directory subDir = Directory('my_project/src');
await subDir.create(recursive: true);
// Create files in directory
File file1 = File('my_project/readme.txt');
File file2 = File('my_project/src/main.dart');
await file1.writeAsString('Project README');
await file2.writeAsString('void main() { print("Hello"); }');
// List directory contents
print('\nDirectory contents:');
await for (FileSystemEntity entity in myDir.list(recursive: true)) {
String type = entity is File ? 'File' : 'Directory';
print('$type: ${entity.path}');
}
// Get current directory
Directory current = Directory.current;
print('\nCurrent directory: ${current.path}');
}
Output:
Directory created: my_project
Directory contents:
File: my_project/readme.txt
Directory: my_project/src
File: my_project/src/main.dart
Current directory: /Users/username/dart_project
🔹 HTTP Client
Making network requests with HttpClient:
import 'dart:io';
import 'dart:convert';
void main() async {
HttpClient client = HttpClient();
try {
// GET request
HttpClientRequest request = await client.getUrl(
Uri.parse('https://jsonplaceholder.typicode.com/posts/1')
);
// Set headers
request.headers.set('User-Agent', 'Dart HTTP Client');
// Send request and get response
HttpClientResponse response = await request.close();
print('Status: ${response.statusCode}');
print('Headers: ${response.headers.contentType}');
// Read response body
String responseBody = await response.transform(utf8.decoder).join();
Map data = json.decode(responseBody);
print('Title: ${data['title']}');
print('Body: ${data['body']}');
} catch (e) {
print('Error: $e');
} finally {
client.close();
}
}
🔹 Process Management
Running system processes and commands:
import 'dart:io';
void main() async {
// Run a simple command
ProcessResult result = await Process.run('echo', ['Hello from process!']);
print('Exit code: ${result.exitCode}');
print('Output: ${result.stdout}');
if (result.stderr.isNotEmpty) {
print('Error: ${result.stderr}');
}
// List files (works on Unix/Linux/Mac)
try {
ProcessResult lsResult = await Process.run('ls', ['-la']);
print('\nDirectory listing:');
print(lsResult.stdout);
} catch (e) {
print('Could not run ls command: $e');
}
// Get system information
print('\nSystem Information:');
print('Platform: ${Platform.operatingSystem}');
print('Version: ${Platform.operatingSystemVersion}');
print('Dart version: ${Platform.version}');
// Environment variables
Map env = Platform.environment;
print('Home directory: ${env['HOME'] ?? env['USERPROFILE'] ?? 'Unknown'}');
}
🔹 Stream-based File Reading
Reading large files efficiently with streams:
import 'dart:io';
import 'dart:convert';
void main() async {
File file = File('large_file.txt');
// Create a sample file
await file.writeAsString('Line 1\nLine 2\nLine 3\nLine 4\nLine 5\n');
// Read file as stream
Stream> inputStream = file.openRead();
await for (String line in inputStream
.transform(utf8.decoder)
.transform(LineSplitter())) {
print('Processing: $line');
}
print('File processing completed');
}
Output:
Processing: Line 1
Processing: Line 2
Processing: Line 3
Processing: Line 4
Processing: Line 5
File processing completed