Phần 4: File System (P2)

Các phần trước

Phần 1: Biến, Hàm, Kiểu dữ liệu trong Node.JS

Phần 2: Tạo Modules trong Node.JS

Phần 3: File System (P1)

 

Mở File

Để mở một file ở chế độ không đồng bộ, ta dùng phương thức open() với cú pháp:

fs.open('filename', 'flags', function( err, fd ) {}

 

Ở đây, flags mô tả hành vi của file được. Các giá trị của  flags như sau:

 Flags Mô tả
 r Mở file để đọc. Exception sẽ xuất hiện nếu file không tồn tại
 r+ Mở file để đọc và ghi. Exception sẽ xuất hiện nếu file không tồn tại
 rs Mở file để đọc trong chế độ đồng bộ
 rs+ Mở file để đọc và ghi ở chế độ đồng bộ
 w Mở file để ghi. File sẽ được tạo mới ( nếu nó không tồn tại ) hoặc truncated ( nếu nó tồn tại )
 wx Giống với 'w', nhưng sẽ không hoạt động nếu file không tồn tại
 w+ Mở file để đọc và ghi. File sẽ được tạo mới ( nếu nó không tồn tại ) hoặc cắt ngắn ( nếu nó tồn tại )
 wx+ Giống với 'wx', nhưng sẽ không hoạt động nếu file không tồn tại
 a Mở file để chèn thêm dữ liệu. File sẽ được tạo nếu nó không tồn tại
 ax Giống với 'a', nhưng sẽ không hoạt động nếu file không tồn tại
 a+ Mở file để đọc và chèn thêm dữ liệu. File sẽ được tạo nếu nó không tồn tại
 ax+ Giống với 'a+', nhưng sẽ không hoạt động nếu file không tồn tại

 

Ví dụ:

var fs = require("fs");

console.log("Chuẩn bị mở file");
fs.open('text.txt', 'r+', function(err, fd) {
   if (err) {
      return console.error(err);
   }
  console.log("Mở file thành công!");     
});

//Kết quả
//Chuẩn bị mở file
//Mở file thành công!

 

 

Lấy thông tin của File

Để lấy thông tin của file, ta dùng phương thức stats(), với cú pháp:

fs.stats('filename', function(err, stats) {}

 

Ngoài ra phương thức stats() còn có một số thuộc tính để kiếm tra kiểu dữ liệu. Đó là:

Phương thứcMô tả
 stats.isFile() Trả về true nếu đó là một file
 stats.isDirectory() Trả về true nếu đó là một thư mục
 stats.isBlockDevice() Trả về true nếu đó là một block device
 stats.isCharacterDevice() Trả về true nếu đó là một character device
 stats.isSymbolicLink() Trả về true nếu đó là một symbolic link
 stats.isFIFO() Trả về true nếu đó là một kiểu FIFO
 stats.isSocket() Trả về true nếu đó là một kiểu Socket

 

Ví dụ:

var fs = require("fs");

fs.stat('text.txt', function (err, stats) {
   if (err) {
       return console.error(err);
   }
   console.log(stats);
   console.log("Lấy thông tin thành công!");
   
   // Kiểm tra kiểu dữ liệu
   console.log("isFile ? " + stats.isFile());
   console.log("isDirectory ? " + stats.isDirectory());    
});

//Kết quả
//Stats {
//   dev: 3738489860,
//   mode: 33206,
//   nlink: 1,
//   uid: 0,
//   gid: 0,
//   rdev: 0,
//   blksize: undefined,
//   ino: 2814749767269133,
//   size: 49,
//   blocks: undefined,
//   atimeMs: 1522033271821.958,
//   mtimeMs: 1522121359647.3086,
//   ctimeMs: 1522121359647.3086,
//   birthtimeMs: 1522033271821.958,
//   atime: 2018-03-26T03:01:11.822Z,
//   mtime: 2018-03-27T03:29:19.647Z,
//   ctime: 2018-03-27T03:29:19.647Z,
//   birthtime: 2018-03-26T03:01:11.822Z }
//Lấy thông tin thành công!
//isFile ? true
//isDirectory ? false

 

 

Đóng File

Để đóng một file đang mở, ta dung phương thức close():

fs.close(fd, function(err) {})

//fd là file descriptor, được trả về từ phương thức fs.open()

 

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

fs.open('text.txt', 'r+', function(err, fd) {
    if (err) {
      return console.error(err);
    }
    console.log("Mở File thành công!");
    console.log("Bắt đầu đọc file");
   
    fs.read(fd, buf, 0, buf.length, 0, function(err, bytes){
        if (err){
            console.log(err);
        }

        // In ra nội dung trong file
        if(bytes > 0){
            console.log(buf.slice(0, bytes).toString());
        }

        // Đóng file 
        fs.close(fd, function(err){
            if (err){
                console.log(err);
            } 
            console.log("Đóng file thành công.");
        });
    });
});


//Kết quả
//Mở File thành công!
//Bắt đầu đọc file
//Techmaster VN
//Lập trình Node.JS cơ bản
//
//
//Đóng file thành công.

 

 

Cắt ngắn File (Truncate)

Để truncate một file đã mở, ta dùng phương thức ftruncate():

fs.ftruncate(fd, length, function(err) {} )

//fd: file descriptor được trả về từ phương thức open()
//length: độ dài của file mà muốn truncate

 

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

fs.open('text.txt', 'r+', function(err, fd) {
   if (err) {
       return console.error(err);
   }
   console.log("File được mở thành công!");
   console.log("Truncate file");
   
   // Truncate một file đã được mở.
   fs.ftruncate(fd, 10, function(err){
      if (err){
         console.log(err);
      } 
      console.log("File đã được truncate.");
      console.log("Đọc dữ liệu file sau khi truncate"); 
      fs.read(fd, buf, 0, buf.length, 0, function(err, bytes){
         if (err){
            console.log(err);
         }

         // In ra nội dung sau khi truncate.
         if(bytes > 0){
            console.log(buf.slice(0, bytes).toString());
         }

         // Đóng file.
         fs.close(fd, function(err){
            if (err){
               console.log(err);
            } 
            console.log("File đã được đóng.");
         });
      });
   });
});


//Kết quả
//File được mở thành công!
//Truncate file
//File đã được truncate.
//Đọc dữ liệu file sau khi truncate
//Techmaster
//File đã được đóng.

 

 

Xóa File

Để xóa một file, ta dung phương thức unlink().

var fs = require('fs');

fs.unlink('test.txt', function(err) {
   if (err) {
      return console.error(err);
   }
   console.log("Xóa file thành công!");
});

//Kết quả
//Xóa file thành công!