Home Tutorial Nodejs Node.js – Bài 9: File System

Node.js – Bài 9: File System

39 min read
0
134

Nút triển khai Tệp I/O bằng cách sử dụng các trình bao bọc đơn giản xung quanh các chức năng POSIX tiêu chuẩn. Có thể nhập mô-đun Hệ thống tệp nút (fs) bằng cú pháp sau –

var fs = require("fs")


Đồng bộ vs Không đồng bộ

Mọi phương thức trong mô-đun fs đều có dạng đồng bộ cũng như không đồng bộ. Các phương thức không đồng bộ lấy tham số cuối cùng làm hàm gọi lại hàm callback  và tham số đầu tiên của hàm gọi lại là lỗi. Phương thức không đồng bộ không bao giờ chặn chương trình trong khi thực thi nhưng bạn phải xử lý callback, trong khi phương thức thứ hai xử lý tuần tự.

Ví dụ

Tạo một tệp văn bản có tên input.txt với nội dung sau –

Tutorials Point is giving self learning content
to teach the world in simple and easy way!!!!!

Hãy để chúng tôi tạo một tệp js có tên main.js với đoạn mã sau –

var fs = require("fs");

// Asynchronous read
fs.readFile('input.txt', function (err, data) {
   if (err) {
      return console.error(err);
   }
   console.log("Asynchronous read: " + data.toString());
});

// Synchronous read
var data = fs.readFileSync('input.txt');
console.log("Synchronous read: " + data.toString());

console.log("Program Ended");

Bây giờ hãy chạy main.js để xem kết quả –

$ node main.js

Xác minh đầu ra.

Synchronous read: Tutorials Point is giving self learning content
to teach the world in simple and easy way!!!!!

Program Ended
Asynchronous read: Tutorials Point is giving self learning content
to teach the world in simple and easy way!!!!!

Các phần tiếp theo trong chương này cung cấp một tập hợp các ví dụ hay về các phương pháp File I/O chính.

Mở file

cú pháp

Sau đây là cú pháp của phương thức để mở tệp ở chế độ không đồng bộ –

fs.open(path, flags[, mode], callback)

Thông số

Dưới đây là mô tả về các tham số được sử dụng –

  • path – Đây là chuỗi có tên tệp bao gồm đường dẫn.
  • flags – Cờ cho biết hành vi của tệp sẽ được mở. Tất cả các giá trị có thể đã được đề cập dưới đây.
  • mode – Nó đặt chế độ tệp (quyền và bit dính), nhưng chỉ khi tệp được tạo. Nó mặc định là 0666, có thể đọc và ghi được.
  • callback − Đây là hàm gọi lại có hai đối số (err, fd).

flags

Cờ cho hoạt động đọc/ghi là –

STT. Cờ & Mô tả
1 r

Mở tệp để đọc. Một ngoại lệ xảy ra nếu tệp không tồn tại.

2 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.

3 rs

Mở tệp để đọc ở chế độ đồng bộ.

4 rs +

Mở tệp để đọc và ghi, yêu cầu hệ điều hành mở tệp đồng bộ. Xem ghi chú cho ‘rs’ về việc sử dụng điều này một cách thận trọng.

5 w

Mở 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).

6 wx

Giống như ‘w’ nhưng không thành công nếu đường dẫn tồn tại.

7 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).

số 8 wx+

Giống như ‘w+’ nhưng không thành công nếu đường dẫn tồn tại.

9 a

Mở tệp để nối thêm. Tệp được tạo nếu nó không tồn tại.

10 ax

Giống như ‘a’ nhưng không thành công nếu đường dẫn tồn tại.

11 a+

Mở tệp để đọc và nối thêm. Tệp được tạo nếu nó không tồn tại.

12 ax+

Giống như ‘a+’ nhưng không thành công nếu đường dẫn tồn tại.

Ví dụ

Hãy để chúng tôi tạo một tệp js có tên main.js có đoạn mã sau để mở tệp input.txt để đọc và ghi.

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!");     
});

Bây giờ hãy chạy main.js để xem kết quả –

$ node main.js

Xác minh đầu ra.

Going to open file!
File opened successfully!

Nhận thông tin tệp

cú pháp

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

fs.stat(path, callback)

Thông số

Dưới đây là mô tả về các tham số được sử dụng –

  • path – Đây là chuỗi có tên tệp bao gồm đườ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 loại fs.Stats được in bên dưới trong ví dụ.

Ngoài các thuộc tính quan trọng được in bên dưới trong ví dụ, có một số phương thức hữu ích có sẵn trong lớp fs.Stats có thể được sử dụng để kiểm tra loại tệp. Các phương pháp này được đưa ra trong bảng sau.

Sơ Không. Phương pháp & Mô tả
1 stats.isFile()

Trả về true nếu loại tệp của một tệp đơn giản.

2 stats.isDirectory()

Trả về true nếu loại tệp của một thư mục.

3 stats.isBlockDevice()

Trả về true nếu loại tệp của thiết bị khối.

4 stats.is CharacterDevice()

Trả về true nếu loại tệp của thiết bị ký tự.

5 stats.isSymbolicLink()

Trả về true nếu loại tệp của một liên kết tượng trưng.

6 stats.isFIFO()

Trả về true nếu loại tệp là FIFO.

7 stats.isSocket()

Trả về true nếu loại tệp của asocket.

Ví dụ

Hãy tạo một tệp js có tên main.js với đoạn mã sau –

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 chạy main.js để xem kết quả –

$ node main.js

Xác minh đầu ra.

Going to get file info!
{ 
   dev: 1792,
   mode: 33188,
   nlink: 1,
   uid: 48,
   gid: 48,
   rdev: 0,
   blksize: 4096,
   ino: 4318127,
   size: 97,
   blocks: 8,
   atime: Sun Mar 22 2015 13:40:00 GMT-0500 (CDT),
   mtime: Sun Mar 22 2015 13:40:57 GMT-0500 (CDT),
   ctime: Sun Mar 22 2015 13:40:57 GMT-0500 (CDT) 
}
Got file info successfully!
isFile ? true
isDirectory ? false

Viết nội dung lên một file

cú pháp

Sau đây là cú pháp của một trong các phương thức để ghi vào tệp –

fs.writeFile(filename, data[, options], callback)

Phương pháp này sẽ ghi đè lên tệp nếu tệp đã tồn tại. Nếu bạn muốn ghi vào một tệp hiện có thì bạn nên sử dụng một phương pháp khác có sẵn.

Thông số

Dưới đây là mô tả về các tham số được sử dụng –

  • đường dẫn – Đây là chuỗi có tên tệp bao gồm đường dẫn.
  • dữ liệu – Đây là Chuỗi hoặc Bộ đệm được ghi vào tệp.
  • tùy chọn − Tham số thứ ba là một đối tượng sẽ chứa {encoding, mode, flag}. Theo mặc định. mã hóa là utf8, chế độ là giá trị bát phân 0666. và cờ là ‘w’
  • gọi lại − Đây là hàm gọi lại nhận một tham số duy nhất err trả về lỗi trong trường hợp có bất kỳ lỗi viết nào.

Ví dụ

Hãy để chúng tôi tạo một tệp js có tên main.js có mã sau –

var fs = require("fs");

console.log("Going to write into existing file");
fs.writeFile('input.txt', 'Simply Easy Learning!', function(err) {
   if (err) {
      return console.error(err);
   }
   
   console.log("Data written successfully!");
   console.log("Let's read newly written data");
   
   fs.readFile('input.txt', function (err, data) {
      if (err) {
         return console.error(err);
      }
      console.log("Asynchronous read: " + data.toString());
   });
});

Bây giờ hãy chạy main.js để xem kết quả –

$ node main.js

Xác minh đầu ra.

Going to write into existing file
Data written successfully!
Let's read newly written data
Asynchronous read: Simply Easy Learning!

Đọc một tập tin

cú pháp

Sau đây là cú pháp của một trong các phương thức để đọc từ một tệp –

fs.read(fd, buffer, offset, length, position, callback)

Phương pháp này sẽ sử dụng bộ mô tả tệp để đọc tệp. Nếu bạn muốn đọc tệp trực tiếp bằng tên tệp, thì bạn nên sử dụng một phương pháp khác có sẵn.

Thông số

Dưới đây là mô tả về các tham số được sử dụng –

  • fd − Đây là bộ mô tả tệp được trả về bởi fs.open().
  • buffer – Đây là bộ đệm mà dữ liệu sẽ được ghi vào.
  • offset – Đây là phần bù trong bộ đệm để bắt đầu ghi.
  • length – Đây là một số nguyên chỉ định số byte cần đọc.
  • position – Đây là một số nguyên chỉ định vị trí bắt đầu đọc trong tệp. Nếu vị trí là null, dữ liệu sẽ được đọc từ vị trí tệp hiện tại.
  • callback − Đây là hàm gọi lại nhận ba đối số, (err, bytesRead, bộ đệm).

Ví dụ

Hãy để chúng tôi tạo một tệp js có tên main.js với đoạn mã sau –

var fs = require("fs");
var buf = new Buffer(1024);

console.log("Going to open an existing file");
fs.open('input.txt', 'r+', function(err, fd) {
   if (err) {
      return console.error(err);
   }
   console.log("File opened successfully!");
   console.log("Going to read the file");
   
   fs.read(fd, buf, 0, buf.length, 0, function(err, bytes){
      if (err){
         console.log(err);
      }
      console.log(bytes + " bytes read");
      
      // Print only read bytes to avoid junk.
      if(bytes > 0){
         console.log(buf.slice(0, bytes).toString());
      }
   });
});

Bây giờ hãy chạy main.js để xem kết quả –

$ node main.js

Xác minh đầu ra.

Going to open an existing file
File opened successfully!
Going to read the file
97 bytes read
Tutorials Point is giving self learning content
to teach the world in simple and easy way!!!!!

Đóng một file

cú pháp

Sau đây là cú pháp để đóng một tệp đã mở –

fs.close(fd, callback)

Thông số

Dưới đây là mô tả về các tham số được sử dụng –

  • fd − Đây là bộ mô tả tệp được trả về bởi phương thức tệp fs.open().
  • callback − Đây là chức năng gọi lại Không có đối số nào khác ngoài một ngoại lệ có thể được đưa ra cho hàm gọi lại hoàn thành.

Ví dụ

Hãy để chúng tôi tạo một tệp js có tên main.js có mã sau –

var fs = require("fs");
var buf = new Buffer(1024);

console.log("Going to open an existing file");
fs.open('input.txt', 'r+', function(err, fd) {
   if (err) {
      return console.error(err);
   }
   console.log("File opened successfully!");
   console.log("Going to read the file");
   
   fs.read(fd, buf, 0, buf.length, 0, function(err, bytes) {
      if (err) {
         console.log(err);
      }

      // Print only read bytes to avoid junk.
      if(bytes > 0) {
         console.log(buf.slice(0, bytes).toString());
      }

      // Close the opened file.
      fs.close(fd, function(err) {
         if (err) {
            console.log(err);
         } 
         console.log("File closed successfully.");
      });
   });
});

Bây giờ hãy chạy main.js để xem kết quả –

$ node main.js

Xác minh đầu ra.

Going to open an existing file
File opened successfully!
Going to read the file
Tutorials Point is giving self learning content
to teach the world in simple and easy way!!!!!

File closed successfully.

Cắt bớt một tập tin

cú pháp

Sau đây là cú pháp của phương thức cắt bớt một tệp đã mở –

fs.ftruncate(fd, len, callback)

Thông số

Dưới đây là mô tả về các tham số được sử dụng –

  • fd − Đây là bộ mô tả tệp được trả về bởi fs.open().
  • len − Đây là độ dài của tệp mà sau đó tệp sẽ bị cắt bớt.
  • gọi lại − Đây là chức năng gọi lại Không có đối số nào khác ngoài một ngoại lệ có thể được đưa ra cho hàm gọi lại hoàn thành.

Ví dụ

Hãy để chúng tôi tạo một tệp js có tên main.js có mã sau –

var fs = require("fs");
var buf = new Buffer(1024);

console.log("Going to open an existing file");
fs.open('input.txt', 'r+', function(err, fd) {
   if (err) {
      return console.error(err);
   }
   console.log("File opened successfully!");
   console.log("Going to truncate the file after 10 bytes");
   
   // Truncate the opened file.
   fs.ftruncate(fd, 10, function(err) {
      if (err) {
         console.log(err);
      } 
      console.log("File truncated successfully.");
      console.log("Going to read the same file"); 
      
      fs.read(fd, buf, 0, buf.length, 0, function(err, bytes){
         if (err) {
            console.log(err);
         }

         // Print only read bytes to avoid junk.
         if(bytes > 0) {
            console.log(buf.slice(0, bytes).toString());
         }

         // Close the opened file.
         fs.close(fd, function(err) {
            if (err) {
               console.log(err);
            } 
            console.log("File closed successfully.");
         });
      });
   });
});

Bây giờ hãy chạy main.js để xem kết quả –

$ node main.js

Xác minh đầu ra.

Going to open an existing file
File opened successfully!
Going to truncate the file after 10 bytes
File truncated successfully.
Going to read the same file
Tutorials 
File closed successfully.

Xóa một tập tin

cú pháp

Sau đây là cú pháp của phương thức xóa một tệp –

fs.unlink(path, callback)

Thông số

Dưới đây là mô tả về các tham số được sử dụng –

  • đường dẫn – Đây là tên tệp bao gồm đường dẫn.
  • gọi lại − Đây là chức năng gọi lại Không có đối số nào khác ngoài một ngoại lệ có thể được đưa ra cho hàm gọi lại hoàn thành.

Ví dụ

Hãy để chúng tôi tạo một tệp js có tên main.js có mã sau –

var fs = require("fs");

console.log("Going to delete an existing file");
fs.unlink('input.txt', function(err) {
   if (err) {
      return console.error(err);
   }
   console.log("File deleted successfully!");
});

Bây giờ hãy chạy main.js để xem kết quả –

$ node main.js

Xác minh đầu ra.

Going to delete an existing file
File deleted successfully!

Tạo một thư mục

cú pháp

Sau đây là cú pháp của phương thức để tạo một thư mục –

fs.mkdir(path[, mode], callback)

Thông số

Dưới đây là mô tả về các tham số được sử dụng –

  • path – Đây là tên thư mục bao gồm đường dẫn.
  • mode – Đây là quyền thư mục được thiết lập. Mặc định là 0777.
  • callback − Đây là chức năng gọi lại Không có đối số nào khác ngoài một ngoại lệ có thể được đưa ra cho hàm gọi lại hoàn thành.

Ví dụ

Hãy để chúng tôi tạo một tệp js có tên main.js có mã sau –

var fs = require("fs");

console.log("Going to create directory /tmp/test");
fs.mkdir('/tmp/test',function(err) {
   if (err) {
      return console.error(err);
   }
   console.log("Directory created successfully!");
});

Bây giờ hãy chạy main.js để xem kết quả –

$ node main.js

Xác minh đầu ra.

Going to create directory /tmp/test
Directory created successfully!

Đọc một thư mục

cú pháp

Sau đây là cú pháp của phương thức để đọc một thư mục –

fs.readdir(path, callback)

Thông số

Dưới đây là mô tả về các tham số được sử dụng –

  • path – Đây là tên thư mục bao gồm đường dẫn.
  • callback − Đây là hàm gọi lại nhận hai đối số (err, tệp) trong đó tệp là một mảng tên của các tệp trong thư mục không bao gồm ‘.’ và ‘..’.

Ví dụ

Hãy để chúng tôi tạo một tệp js có tên main.js có mã sau –

var fs = require("fs");

console.log("Going to read directory /tmp");
fs.readdir("/tmp/",function(err, files) {
   if (err) {
      return console.error(err);
   }
   files.forEach( function (file) {
      console.log( file );
   });
});

Bây giờ hãy chạy main.js để xem kết quả –

$ node main.js

Xác minh đầu ra.

Going to read directory /tmp
ccmzx99o.out
ccyCSbkF.out
employee.ser
hsperfdata_apache
test
test.txt

Xóa một thư mục

cú pháp

Sau đây là cú pháp của phương thức để xóa một thư mục –

fs.rmdir(path, callback)

Thông số

Dưới đây là mô tả về các tham số được sử dụng –

  • path – Đây là tên thư mục bao gồm đường dẫn.
  • callback − Đây là chức năng gọi lại Không có đối số nào khác ngoài một ngoại lệ có thể được đưa ra cho hàm gọi lại hoàn thành.

Ví dụ

Hãy để chúng tôi tạo một tệp js có tên main.js có mã sau –

var fs = require("fs");

console.log("Going to delete directory /tmp/test");
fs.rmdir("/tmp/test",function(err) {
   if (err) {
      return console.error(err);
   }
   console.log("Going to read directory /tmp");
   
   fs.readdir("/tmp/",function(err, files) {
      if (err) {
         return console.error(err);
      }
      files.forEach( function (file) {
         console.log( file );
      });
   });
});

Bây giờ hãy chạy main.js để xem kết quả –

$ node main.js

Xác minh đầu ra.

Going to read directory /tmp
ccmzx99o.out
ccyCSbkF.out
employee.ser
hsperfdata_apache
test.txt
Load More Related Articles
Load More By quangvu
  • Node.js – Bài 13: API RESTful

    Kiến trúc REST là gì? REST là viết tắt của REpresentational State Transfer. REST là kiến ​…
  • Node.js – Bài 11: Web Module

    Kiến trúc ứng dụng web Một ứng dụng Web thường được chia thành bốn lớp – Client  − L…
  • Node.js – Bài 10: Global Objects

    Các đối tượng toàn cầu của Node.js có bản chất toàn cầu và chúng có sẵn trong tất cả các m…
Load More In Nodejs

Check Also

Tự làm web chatGPT đơn giản cho phép dùng nhiều OpenAI key

Trong thời đại công nghệ phát triển như hiện nay, chatbot đang dần trở thành một giải pháp…