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

🧠 Test Your Knowledge

Which method is used to write text to a file in Dart?