Bài 9: Hướng dẫn đọc ghi file với module fs trong Node.js
Nội dung của bài
I. Giới thiệu về module fs trong Node.js
Module fs là một trong những module cốt lõi của Node.js và được sử dụng để tương tác với hệ thống tệp. Nó cung cấp cho chúng ta các phương thức để đọc, ghi và thao tác với các tệp và thư mục trên hệ thống tệp.
II. Các phương thức trong module fs
- Phương thức đọc file
Phương thức đọc file trong module fs là fs.readFile(). Phương thức này sẽ đọc nội dung của tệp và trả về dữ liệu dưới dạng chuỗi hoặc buffer.
Cú pháp:
fs.readFile(path[, options], callback)
Trong đó:
path
là đường dẫn đến file cần đọc.options
là một đối tượng có thể bao gồm các thuộc tính sau:encoding
: định dạng encoding của file, mặc định là null.flag
: định dạng cách file sẽ được mở, mặc định là ‘r’.
callback
là một hàm callback được gọi khi quá trình đọc file hoàn tất.
Ví dụ sau đây sẽ đọc nội dung của file “data.txt” và in ra nội dung đó trên console:
const fs = require('fs');
fs.readFile('data.txt', (err, data) => {
if (err) {
console.error(err);
return;
}
console.log(data.toString());
});
- Phương thức ghi file
Hàm fs.writeFile() dùng để ghi nội dung vào một file đã có hoặc tạo một file mới nếu chưa tồn tại. Cú pháp của hàm này như sau:
fs.writeFile(file, data[, options], callback)
Trong đó:
file
là đường dẫn đến file cần ghi nội dung.data
là nội dung cần ghi vào file.options
là một đối tượng có thể bao gồm các thuộc tính sau:encoding
: định dạng encoding của file, mặc định là utf8.flag
: định dạng cách file sẽ được mở, mặc định là ‘w’.
callback
là một hàm callback được gọi khi quá trình ghi file hoàn tất.
Ví dụ sau đây sẽ tạo một file “output.txt” và ghi nội dung “Hello World!” vào file đó:
const fs = require('fs');
fs.writeFile('output.txt', 'Hello World!', (err) => {
if (err) {
console.error(err);
return;
}
console.log('File created and content saved!');
});
Nếu file “output.txt” đã tồn tại, hàm fs.writeFile() sẽ ghi đè lên nội dung của file đó.
- Phương thức đọc thư mục
Phương thức đọc thư mục trong module fs
cho phép ta đọc nội dung của một thư mục bất kỳ trên hệ thống tệp tin của máy tính.
Để sử dụng phương thức đọc thư mục, ta có thể sử dụng hàm readdir()
của module fs
. Hàm này nhận vào hai tham số là đường dẫn tới thư mục cần đọc và một callback function để xử lý kết quả.
Ví dụ:
const fs = require('fs');
const directoryPath = './myFolder/';
fs.readdir(directoryPath, function (err, files) {
if (err) {
return console.log('Unable to scan directory: ' + err);
}
files.forEach(function (file) {
console.log(file);
});
});
Trong ví dụ trên, ta đọc nội dung của thư mục myFolder
bằng cách sử dụng hàm readdir()
. Nếu có lỗi xảy ra trong quá trình đọc thư mục, chúng ta sẽ in ra thông báo lỗi. Nếu không có lỗi, ta sử dụng phương thức forEach()
để lặp qua từng tên file và in ra tên của từng file.
Ngoài ra, ta cũng có thể sử dụng phương thức readdirSync()
để đọc thư mục đồng bộ, tuy nhiên cách này sẽ block mã chạy cho đến khi toàn bộ nội dung thư mục được đọc xong.
Ví dụ:
const fs = require('fs');
const directoryPath = './myFolder/';
try {
const files = fs.readdirSync(directoryPath);
files.forEach(function (file) {
console.log(file);
});
} catch (err) {
console.log('Unable to scan directory: ' + err);
}
Trong ví dụ này, ta đọc nội dung của thư mục myFolder
bằng cách sử dụng hàm readdirSync()
. Nếu có lỗi xảy ra trong quá trình đọc thư mục, chúng ta sẽ in ra thông báo lỗi. Nếu không có lỗi, ta sử dụng phương thức forEach()
để lặp qua từng tên file và in ra tên của từng file.
Lưu ý rằng, sử dụng phương thức đọc thư mục đồng bộ sẽ block mã chạy và có thể gây ra hiện tượng treo ứng dụng (application hang) nếu thư mục đọc có quá nhiều file và thư mục đọc có kích thước lớn. Do đó, tốt nhất nên sử dụng phương thức đọc thư mục bất đồng bộ để tránh block mã chạy.
- Phương thức xóa file
Phương thức fs.unlink() được sử dụng để xóa một file trong hệ thống tệp tin của máy tính. Để sử dụng phương thức này, ta cần truyền vào đường dẫn tới file cần xóa và một hàm callback để xử lý kết quả xóa file.
Ví dụ, ta có một file “example.txt” trong thư mục “documents” và muốn xóa nó bằng cách sử dụng phương thức fs.unlink():
const fs = require('fs');
const filePath = './documents/example.txt';
fs.unlink(filePath, (err) => {
if (err) {
console.error(err);
return;
}
console.log('File deleted successfully');
});
Trong đoạn code trên, ta sử dụng phương thức fs.unlink() để xóa file “example.txt” trong thư mục “documents”. Nếu quá trình xóa file không thành công, hàm callback sẽ nhận được một đối số lỗi (err), ngược lại, nếu xóa file thành công, chúng ta sẽ nhận được thông báo “File deleted successfully”.
Trong quá trình sử dụng phương thức fs.unlink(), ta cần chú ý đến các trường hợp lỗi như không tìm thấy file cần xóa hoặc không có quyền truy cập vào file. Trong trường hợp này, hàm callback sẽ trả về một đối tượng lỗi.
Trên đây là cách sử dụng phương thức fs.unlink() để xóa file trong Node.js. Việc xóa file là một trong những hoạt động phổ biến trong quản lý file và thư mục. Để sử dụng thành thạo các phương thức trong module fs, bạn nên thường xuyên thực hành và tìm hiểu thêm các tài liệu liên quan.
III. Tổng kết
Trong bài viết này, chúng ta đã tìm hiểu về cách đọc và ghi file trong Node.js với module fs. Chúng ta đã học cách sử dụng các phương thức của module fs để đọc và ghi file đồng bộ và bất đồng bộ, cũng như đọc thư mục và xóa file.
Để đọc file, chúng ta sử dụng phương thức fs.readFile()
, để ghi file chúng ta sử dụng phương thức fs.writeFile()
.
Ngoài ra, chúng ta cũng đã học cách đọc thư mục với phương thức fs.readdir()
và xóa file với phương thức fs.unlink()
.
Việc làm việc với file và thư mục là một phần quan trọng trong các ứng dụng Node.js, và module fs cung cấp cho chúng ta các phương thức mạnh mẽ để thực hiện các thao tác này.
Hy vọng bài viết này đã giúp bạn hiểu thêm về cách sử dụng module fs trong Node.js để đọc và ghi file. Nếu bạn có bất kỳ câu hỏi hoặc góp ý nào, hãy để lại bình luận bên dưới để chúng ta có thể thảo luận thêm.