Rate this post

Node.js cung cấp một hệ thống I/O (Input/Output) tệp mạnh mẽ và linh hoạt, dựa trên các chức năng POSIX tiêu chuẩn, cho phép bạn tương tác với hệ thống tệp tin trên máy tính. Điều này được thực hiện thông qua mô-đun Hệ thống Tệp (fs), một trong những mô-đun cốt lõi của Node.js.

Mô-đun Hệ thống Tệp (fs)

  • Mô-đun fs trong Node.js cung cấp một API để làm việc với các tệp và thư mục. Nó bao gồm cả hoạt động đồng bộ và bất đồng bộ, cho phép bạn chọn phương thức phù hợp với nhu cầu của ứng dụng.
  • Cách Import Mô-đun fs:Sử dụng require('fs') để nhập mô-đun fs vào tệp JavaScript của bạn, sau đó bạn có thể sử dụng các phương thức của nó để thực hiện các hoạt động liên quan đến tệp tin.

Cú pháp:

var fs = require("fs")  

Các Chức Năng Cơ Bản của Mô-đun fs

  1. Đọc và Ghi Tệp Tin:
    • fs.readFile()fs.writeFile() cho phép bạn đọc nội dung của tệp tin vào bộ nhớ và ghi nội dung mới vào tệp.
    • Các phiên bản bất đồng bộ của các hàm này giúp thực hiện các hoạt động mà không chặn luồng chính của ứng dụng.
  2. Stream và Buffer:
    • Để xử lý dữ liệu lớn, mô-đun fs cung cấp các khả năng sử dụng stream (fs.createReadStream()fs.createWriteStream()), cho phép bạn xử lý dữ liệu một cách từng phần, giúp tối ưu hóa việc sử dụng bộ nhớ và hiệu suất.
  3. Thao Tác với Thư Mục:
    • Các hàm như fs.mkdir(), fs.readdir(), và fs.rmdir() cho phép bạn tạo, đọc và xóa các thư mục.
  4. Quản Lý Thông Tin Tệp và Thư Mục:
    • Hàm fs.stat() cung cấp thông tin chi tiết về tệp và thư mục, như kích thước tệp, ngày tạo, và nhiều thông tin khác.
  5. Xử Lý Lỗi và Ngoại Lệ:
    • Trong khi làm việc với I/O tệp, việc xử lý lỗi là quan trọng. Mô-đun fs cung cấp các cơ chế để bắt và xử lý lỗi thông qua callback hoặc promise.

Node.js FS Đọc File

Trong Node.js, mô-đun Hệ thống Tệp (fs) cung cấp các phương thức đồng bộ và không đồng bộ để đọc tệp. Sự khác biệt chính giữa hai phương thức này nằm ở cách chúng xử lý I/O.

Phương thức Không Đồng Bộ

  • Phương thức không đồng bộ không chặn việc thực thi chương trình. Khi gọi, Node.js sẽ tiếp tục thực hiện chương trình tiếp theo mà không cần đợi phương thức hoàn thành.
  • Khi dữ liệu đã sẵn sàng hoặc có lỗi xảy ra, một hàm gọi lại (callback) được thực thi.

Ví Dụ Đọc File Không Đồng Bộ

File: main.js

var fs = require("fs");

// Đọc file không đồng bộ
fs.readFile('input.txt', function (err, data) {
   if (err) {
       return console.error(err);
   }
   console.log("Asynchronous read: " + data.toString());
});

Trong ví dụ trên, fs.readFile được sử dụng để đọc file một cách không đồng bộ. Khi dữ liệu được đọc xong, nó sẽ in ra thông tin qua hàm gọi lại.

Phương thức Đồng Bộ

  • Phương thức đồng bộ chặn việc thực thi chương trình đến khi hoạt động I/O hoàn thành. Điều này có thể gây cản trở hiệu suất, đặc biệt trong các ứng dụng chạy nhiều hoạt động I/O.

Ví Dụ Đọc File Đồng Bộ

Tiếp tục trong File: main.js

// Đọc file đồng bộ
var data = fs.readFileSync('input.txt');
console.log("Synchronous read: " + data.toString());
console.log("Program Ended");

Trong đoạn mã này, fs.readFileSync được sử dụng để đọc file một cách đồng bộ. Chương trình sẽ chờ cho đến khi file được đọc xong trước khi chuyển sang lệnh tiếp theo.

Chạy Script và So Sánh Kết Quả

Khi chạy script này bằng lệnh node main.js, bạn sẽ thấy rằng lệnh đọc đồng bộ sẽ hoàn thành trước, sau đó mới đến lệnh đọc không đồng bộ, phản ánh cách Node.js xử lý I/O không đồng bộ.

Sử dụng phương thức không đồng bộ giúp tận dụng tối đa hiệu quả của Node.js, đặc biệt là trong việc xử lý nhiều hoạt động I/O. Nó ngăn chặn việc chương trình bị chặn, cho phép xử lý nhiều tác vụ cùng một lúc.

Node.js mở một file

Trong Node.js, việc mở file là một thao tác quan trọng, thường được thực hiện thông qua mô-đun Hệ thống Tệp (fs). Hãy xem xét cú pháp và các tham số liên quan khi mở file một cách không đồng bộ.

Cú Pháp

fs.open(path, flags[, mode], callback)
  • Phương thức fs.open cho phép bạn mở file theo các cách khác nhau tùy thuộc vào tham số được cung cấp. Hãy xem xét ý nghĩa của từng tham số:

Giải Thích Tham Số

  1. path:
    • Là một chuỗi chỉ định đường dẫn tới file cần mở.
    • Ví dụ: './folder/myfile.txt' chỉ định đến file myfile.txt trong thư mục folder.
  2. flags:
    • Các cờ này chỉ định cách file sẽ được mở.
    • Ví dụ: 'r' cho đọc, 'w' cho ghi, 'a' cho ghi tiếp vào cuối file, và nhiều cờ khác.
    • Các cờ này xác định hành vi của file (như chỉ đọc, chỉ ghi, v.v.).
  3. mode:
    • Chế độ này đặt quyền cho file mới được tạo.
    • Nó là một giá trị số, mặc định là 0666 (có nghĩa là file có thể đọc và ghi được).
    • Chế độ này thường được sử dụng khi tạo file mới.
  4. callback:
    • Đây là một hàm gọi lại (callback) được thực thi sau khi file được mở.
    • Callback nhận hai tham số: err (lỗi, nếu có) và fd (file descriptor, một tham chiếu đến file đã mở).

Ví Dụ Sử Dụng

fs.open('input.txt', 'r', function (err, fd) {
   if (err) {
       return console.error(err);
   }
   console.log("File opened successfully!");
});

Trong ví dụ trên, fs.open được sử dụng để mở file input.txt ở chế độ đọc (‘r’). Callback sẽ xác nhận rằng file đã được mở thành công hoặc thông báo lỗi nếu có.

Tại Sao Sử Dụng Phương Thức Không Đồng Bộ?

  • Sử dụng phương thức không đồng bộ giúp đảm bảo rằng thao tác I/O không làm chặn luồng chính của ứng dụng Node.js.
  • Điều này rất quan trọng trong việc duy trì hiệu suất cao và khả năng phản hồi của ứng dụng, đặc biệt trong các tình huống cần xử lý nhiều tác vụ cùng một lúc.

Mở file không đồng bộ trong Node.js là một phần cơ bản của việc quản lý và xử lý tệp tin, cho phép các ứng dụng tương tác với hệ thống tệp một cách hiệu quả và linh hoạt.

Flags cho Read/Write

Sau đây là danh sách các cờ cho hoạt động đọc / ghi:

FlagDescription
rmở tệp để đọc. một ngoại lệ xảy ra nếu tệp không tồn tại.
r +mở tệp để đọc và ghi. một ngoại lệ xảy ra nếu tệp không tồn tại.
rsmở tệp để đọc ở chế độ đồng bộ.
rs +mở tệp để đọc và ghi, yêu cầu hệ điều hành mở nó đồng bộ. xem ghi chú cho ‘rs’ về việc sử dụng nó một cách thận trọng.
wmở tệp để viết. tệp được tạo (nếu nó không tồn tại) hoặc bị cắt bớt (nếu nó tồn tại).
wxnhư ‘w’ nhưng không thành công nếu đường dẫn tồn tại.
w +mở tệp để đọc và ghi. tệp được tạo (nếu nó không tồn tại) hoặc bị cắt bớt (nếu nó tồn tại).
wx +như ‘w +’ nhưng không thành công nếu đường dẫn tồn tại.
amở tệp để bổ sung. tệp được tạo nếu nó không tồn tại.
axnhư ‘a’ nhưng không thành công nếu đường dẫn tồn tại.
a+mở tệp để đọc và bổ sung. tệp được tạo nếu nó không tồn tại.
ax+mở tệp để đọc và bổ sung. tệp được tạo nếu nó không tồn tại.

Tạo tệp JavaScript có tên “main.js” có mã sau để mở tệp input.txt để đọc và ghi.

File: main.js

var fs = require("fs");  
// Asynchronous - Opening File  
console.log("Going to open file!");  
fs.open('input.txt', 'r+', function(err, fd) {  
   if (err) {  
       return console.error(err);  
   }  
  console.log("File opened successfully!");       
});  

Mở dấu nhắc lệnh Node.js và chạy main.js:

node main.js  

Phương pháp thông tin tệp Node.js

Sau đây là cú pháp của phương thức để lấy thông tin tệp.

fs.stat(path, callback)  

Giải thích tham số:

  • Path: Đây là chuỗi có tên tệp bao gồm cả đường dẫn.
  • Callback: Đây là hàm gọi lại nhận hai đối số (err, stats) trong đó stats là một đối tượng của kiểu fs.Stats.

Phương thức của stats

MethodDescription
stats.isfile ()trả về true nếu loại tệp của một tệp đơn giản.
stats.isdirectory ()trả về true nếu loại tệp của một thư mục.
stats.isblockdevice ()trả về true nếu loại tệp của thiết bị khối.
stats.ischaracterdevice ()trả về true nếu loại tệp của thiết bị ký tự.
stats.issymboliclink ()trả về true nếu loại tệp của một liên kết tượng trưng.
stats.isfifo ()trả về giá trị true nếu loại tệp của một loại ngũ cốc.
stats.issocket ()trả về true nếu loại tệp asocket.

Hãy lấy một ví dụ để tạo một tệp JavaScript có tên là main.js có mã sau:

File: main.js

var fs = require("fs");  
console.log("Going to get file info!");  
fs.stat('input.txt', function (err, stats) {  
   if (err) {  
       return console.error(err);  
   }  
   console.log(stats);  
   console.log("Got file info successfully!");  
   // Check file type  
   console.log("isFile ? " + stats.isFile());  
   console.log("isDirectory ? " + stats.isDirectory());      
});  

Bây giờ hãy mở dấu nhắc lệnh Node.js và chạy main.js

node main.js  

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Contact Me on Zalo
Call now