Phần 10: NodeJS – Đọc ghi File – NodeJS căn bản cho người mới bắt đầu

Trong các chương trước, bạn thấy rằng mình đã sử dụng nhiều cú pháp require(“fs”). Thế cú pháp để làm gì ? Đây chính là cú pháp để khai báo fs Module để triển khai những hoạt động về File I/O trong Node.js. Cú pháp như dưới đây:
var fs = require("fs")
Table of Contents
Khái niệm Đồng bộ vs Không đồng bộ trong Node.js
Mỗi phương thức trong fs Module có các kind đồng bộ và các kind không đồng bộ. Những phương thức không đồng bộ nhận 1 tham số cuối cùng là 1 hàm callback thực thi khi kết thúc và nhận tham số đầu tiên là 1 hàm callback để xử lý lỗi. Việc sử dụng những phương thức không đồng bộ là tốt hơn những phương thức đồng bộ, bởi những phương thức không đồng bộ không bao giờ khóa trình thực thi chương trình trong khi phương thức đồng bộ thì có.
Ví dụ
Để minh họa hoạt động I/O trong Node.js, đầu tiên bạn tạo enter.txt có nội dung:
Tutorials Point is giving self studying content material
to show the world in easy and simple manner!!!!!
Tạo major.js. Như trên đã trình bày, mỗi phương thức của fs Module đều có 2 kind là đồng bộ và không đồng bộ. Để đọc dữ liệu, mình sử dụng phương thức learnFile() của kind không đồng bộ và learnFileSync() của kind đồng bộ để đọc dữ liệu. Hai phương thức này nhận tham số đầu tiên là tên file để đọc dữ liệu từ đấy.
var fs = require("fs");
// Asynchronous learn
fs.learnFile('enter.txt', perform (err, knowledge) {
if (err) {
return console.error(err);
}
console.log("Asynchronous learn: " + knowledge.toString());
});
// Synchronous learn
var knowledge = fs.learnFileSync('enter.txt');
console.log("Synchronous learn: " + knowledge.toString());
console.log("Program Ended");
Chạy major.js để xem kết quả:
$ node major.js
Kiểm tra kết quả:
Synchronous learn: Tutorials Point is giving self studying content material
to show the world in easy and simple manner!!!!!
Program Ended
Asynchronous learn: Tutorials Point is giving self studying content material
to show the world in easy and simple manner!!!!!
Phần tiếp theo mình sẽ trình bày chi tiết những hoạt động về File I/O thường gặp:
Mở 1 File trong Node.js
Cú pháp
Để mở 1 file trong chế độ không đồng bộ, bạn sử dụng phương thức open() có cú pháp:
fs.open(path, flags[, mode], callback)
Tham số
- path – Đây chính là 1 chuỗi biểu diễn tên file cũng như là link đến file đó.
- flags – Biểu diễn hành vi của file được mở. Toàn bộ những giá trị có thể sẽ được trình bày trong bảng sau đây.
- mode – Thiết lập chế độ cho file, những chế độ này chỉ được thiết lập khi file được tạo. Giá trị mặc định là 0666, tức là readable và writeable.
- callback – Hàm callback nhận 2 tham số, ví dụ (err, fd).
Flag
- Mở file để đọc. Xuất hiện Exception nếu như file không tồn tại. (r)
- Mở file để đọc và ghi. Xuất hiện Exception nếu như file không tồn tại. (r+)
- Mở file để đọc trong chế độ đồng bộ. (rs)
- Mở file để đọc và ghi, báo cho HĐH mở nó trong chế độ đồng bộ. (rs+)
- Mở file để ghi. Nếu như file không tồn tại, nó sẽ tạo file mới. (w)
- Giống ‘w’ nhưng hoạt động này không thành công nếu như file không tồn tại (tức là nó không tạo file mới . (wx)
- Mở file để đọc và ghi. Nếu như file không tồn tại, nó sẽ tạo file mới.(w+)
- Giống ‘w+’ nhưng hoạt động này không thành công nếu như file không tồn tại(wx+)
- Mở file để append. File sẽ được tạo nếu như nó không tồn tại. (a)
- Giống ‘a’ nhưng hoạt động này không thành công nếu như file không tồn tại.(ax)
- Mở file để đọc và append. File sẽ được tạo nếu như nó không tồn tại. (a+)
- Giống ‘a+’ nhưng hoạt động này không thành công nếu như file không tồn tại.(ax+)
Ví dụ
Ví dụ sau minh họa cách mở 1 file để đọc và ghi. Đầu tiên bạn tạo major.js có nội dung như sau đây. Nội dung file tương đối giống ví dụ trên, bạn lưu ý vào phần flag đã sử dụng tại đây.
var fs = require("fs");
// Asynchronous - Opening File
console.log("Going to open file!");
fs.open('enter.txt', 'r+', perform(err, fd) {
if (err) {
return console.error(err);
}
console.log("File opened efficiently!");
});
Chạy major.js để xem kết quả:
$ node major.js
Kiểm tra kết quả:
Going to open file!
File opened efficiently!
Lấy thông tin File trong Node.js
Cú pháp
Để lấy thông tin về 1 file trong Node.js, bạn sử dụng phương thức stat() của fs Module có cú pháp:
fs.stat(path, callback)
Chi tiết về tham số
- path – Đây chính là 1 chuỗi biểu diễn tên file cũng như là link đến file đó.
- callback – Là hàm callback nhận 2 tham số (err, stats), trong đó stats là 1 đối tượng của fs.Stats được in ra như ở trong ví dụ sau
Ngoài các thuộc tính quan trọng được in ra như ở trong ví dụ sau, lớp fs.Stats còn có những phương thức có ích có thể được dùng để kiểm tra kiểu file. Đó là:
- stats.isFile() : Trả về true nếu như đó là 1 file
- stats.isDirectory() : Trả về true nếu như đó là 1 folder
- stats.isBlockDevice() : Trả về true nếu như đó là 1 Block Device.
- stats.isCharacterDevice() : Trả về true nếu như đó là 1 Character Device.
- stats.isSymbolicLink() : Trả về true nếu như đó là 1 Symbolic Link.
- stats.isFIFO() : Trả về true nếu như đó là 1 kiểu FIFO.
- stats.isSocket() : Trả về true nếu như đó là 1 kiểu Socket.
Ví dụ
Sau đây chính là ví dụ minh họa cách lấy thông tin về 1 file nào đấy. Tạo major.js và sử dụng phương thức stat() của fs Module đã trình bày bên trên:
var fs = require("fs");
console.log("Going to get file data!");
fs.stat('enter.txt', perform (err, stats) {
if (err) {
return console.error(err);
}
console.log(stats);
console.log("Got file data efficiently!");
// Check file sort
console.log("isFile ? " + stats.isFile());
console.log("isDirectory ? " + stats.isDirectory());
});
Chạy major.js để xem kết quả:
$ node major.js
Kiểm tra kết quả:
Going to get file data!
Got file data efficiently!
isFile ? true
isDirectory ? false
Ghi dữ liệu vào File trong Node.js
Cú pháp
Để ghi dữ liệu vào File trong Node.js, bạn sẽ có thể sử dụng phương thức writeFile() của fs Module như dưới đây:
fs.writeFile(filename, knowledge[, options], callback)
Phương thức này sẽ ghi đè nếu như file đã tồn tại.
Chi tiết về tham số
path – Đây chính là 1 chuỗi biểu diễn tên file cũng như là link đến file đó.
knowledge – Dữ liệu dạng String hay Buffer để ghi vào File.
choices – Tham số này là 1 đối tượng giữ {encoding, mode, flag}. Theo mặc định, mã hóa là utf8, mode là giá trị 0666 và flag là ‘w’
callback – Hàm callback nhận 1 tham số là err và được dùng để trả về 1 lỗi nếu như xảy ra bất kỳ lỗi nào trong hoạt động ghi
Ví dụ
Ví dụ sau minh họa cách ghi dữ liệu đến 1 file. Tạo major.js có nội dung như dưới đây:
Live Demo
var fs = require("fs");
console.log("Going to jot down into present file");
fs.writeFile('enter.txt', 'Simply Easy Learning!', perform(err) {
if (err) {
return console.error(err);
}
console.log("Data written efficiently!");
console.log("Let's learn newly written knowledge");
fs.learnFile('enter.txt', perform (err, knowledge) {
if (err) {
return console.error(err);
}
console.log("Asynchronous learn: " + knowledge.toString());
});
});
Chạy major.js để xem kết quả:
$ node major.js
Kiểm tra kết quả:
Going to jot down into present file
Data written efficiently!
Let's learn newly written knowledge
Asynchronous learn: Simply Easy Learning!
Đọc dữ liệu từ File trong Node.js
Cú pháp
Để đọc dữ liệu từ 1 File, bạn sử dụng phương thức learn() có cú pháp sau:
fs.learn(fd, buffer, offset, size, place, callback)
Phương thức này sẽ sử dụng tham số fd (viết tắt của File Descriptor) để đọc file. Nếu như bạn cần đọc file do sử dụng trực tiếp tên file thì các bạn nên sử dụng phương thức khác.
Chi tiết về tham số
- fd – Là viết tắt của file descriptor được trả về do phương thức fs.open().
- buffer – Đây chính là Buffer, là nơi dữ liệu được ghi vào.
- offset – Đây chính là offset trong Buffer để dữ liệu bắt đầu ghi từ vị trí đó.
- size – Những nguyên xác định số byte để đọc.
- place – Những nguyên xác định nơi bắt đầu đọc từ trong file. Nếu như vị trí là null, dữ liệu sẽ được đọc từ vị trí hiện giờ của file.
- callback – 1 hàm callback nhận ba tham số, có dạng (err, bytesRead, buffer).
Ví dụ
Tạo major.js có nội dung sau:
var fs = require("fs");
var buf = new Buffer(1024);
console.log("Going to open an present file");
fs.open('enter.txt', 'r+', perform(err, fd) {
if (err) {
return console.error(err);
}
console.log("File opened efficiently!");
console.log("Going to learn the file");
fs.learn(fd, buf, 0, buf.size, 0, perform(err, bytes){
if (err){
console.log(err);
}
console.log(bytes + " bytes learn");
// Print solely learn bytes to keep away from junk.
if(bytes > 0){
console.log(buf.slice(0, bytes).toString());
}
});
});
Chạy major.js để xem kết quả:
$ node major.js
Kiểm tra kết quả:
Going to open an present file
File opened efficiently!
Going to learn the file
97 bytes learn
Tutorials Point is giving self studying content material
to show the world in easy and simple manner!!!!!
Đóng File trong Node.js
Cú pháp
Để đóng 1 file sau khi đã mở, bạn sử dụng phương thức shut() có cú pháp:
fs.shut(fd, callback)
Chi tiết về tham số
fd – Là viết tắt của file descriptor được trả về do phương thức fs.open().
callback – Hàm callback nhận 1 tham số để xử lý trường hợp nếu như có exception.
Ví dụ
Tạo major.js có nội dung:
var fs = require("fs");
var buf = new Buffer(1024);
console.log("Going to open an present file");
fs.open('enter.txt', 'r+', perform(err, fd) {
if (err) {
return console.error(err);
}
console.log("File opened efficiently!");
console.log("Going to learn the file");
fs.learn(fd, buf, 0, buf.size, 0, perform(err, bytes) {
if (err) {
console.log(err);
}
// Print solely learn bytes to keep away from junk.
if(bytes > 0) {
console.log(buf.slice(0, bytes).toString());
}
// Close the opened file.
fs.shut(fd, perform(err) {
if (err) {
console.log(err);
}
console.log("File closed efficiently.");
});
});
});
Chạy major.js để xem kết quả:
$ node major.js
Kiểm tra kết quả:
Going to open an present file
File opened efficiently!
Going to learn the file
Tutorials Point is giving self studying content material
to show the world in easy and simple manner!!!!!
File closed efficiently.
Truncate 1 File trong Node.js
Cú pháp
Để truncate 1 file đã mở, bạn sử dụng phương thúc ftruncate() có cú pháp:
fs.ftruncate(fd, len, callback)
Chi tiết về tham số
- fd – Là viết tắt của file descriptor được trả về do phương thức fs.open().
- len – Là độ dài của file sau khi được truncate.
- callback – Hàm callback nhận 1 tham số để xử lý trường hợp nếu như có exception.
Ví dụ
Tạo major.js có nội dung sau:
var fs = require("fs");
var buf = new Buffer(1024);
console.log("Going to open an present file");
fs.open('enter.txt', 'r+', perform(err, fd) {
if (err) {
return console.error(err);
}
console.log("File opened efficiently!");
console.log("Going to truncate the file after 10 bytes");
// Truncate the opened file.
fs.ftruncate(fd, 10, perform(err) {
if (err) {
console.log(err);
}
console.log("File truncated efficiently.");
console.log("Going to learn the identical file");
fs.learn(fd, buf, 0, buf.size, 0, perform(err, bytes){
if (err) {
console.log(err);
}
// Print solely learn bytes to keep away from junk.
if(bytes > 0) {
console.log(buf.slice(0, bytes).toString());
}
// Close the opened file.
fs.shut(fd, perform(err) {
if (err) {
console.log(err);
}
console.log("File closed efficiently.");
});
});
});
});
Chạy major.js để xem kết quả:
$ node major.js
Kiểm tra kết quả:
Going to open an present file
File opened efficiently!
Going to truncate the file after 10 bytes
File truncated efficiently.
Going to learn the identical file
Tutorials
File closed efficiently.
Xóa File trong Node.js
Cú pháp
Để xóa 1 file trong Node.js, bạn sử dụng phương thức unlink() có cú pháp:
fs.unlink(path, callback)
Chi tiết về tham số
- path – Là tên file hay tên link trỏ tới file.
- callback – Hàm callback nhận 1 tham số để xử lý trường hợp nếu như có exception.
Ví dụ
Tạo major.js có nội dung sau:
var fs = require("fs");
console.log("Going to delete an present file");
fs.unlink('enter.txt', perform(err) {
if (err) {
return console.error(err);
}
console.log("File deleted efficiently!");
});
Chạy major.js để xem kết quả:
$ node major.js
Kiểm tra kết quả:
Going to delete an present file
File deleted efficiently!
Tạo folder trong Node.js
Cú pháp
Để tạo 1 folder trong Node.js, bạn sử dụng phương thức mkdir() có cú pháp:
fs.mkdir(path[, mode], callback)
Chi tiết về tham số:
- path – Là tên folder gồm link trỏ đến folder đó.
- mode – Chế độ xác định những quyền cho phép khi truy cập folder. Giá trị mặc định là 0777.
- callback – Hàm callback nhận 1 tham số để xử lý trường hợp nếu như có exception.
Ví dụ
Tạo major.js có nội dung sau:
var fs = require("fs");
console.log("Going to create listing /tmp/check");
fs.mkdir('/tmp/check',perform(err) {
if (err) {
return console.error(err);
}
console.log("Directory created efficiently!");
});
Chạy major.js để xem kết quả:
$ node major.js
Kiểm tra kết quả:
Going to create listing /tmp/check
Directory created efficiently!
Đọc folder trong Node.js
Cú pháp
Để đọc folder trong Node.js, bạn sử dụng phương thức readdir() có cú pháp:
fs.readdir(path, callback)
Chi tiết về tham số:
- path – Là tên folder gồm link trỏ đến folder đó.
- callback – Hàm callback nhận 2 tham số, dạng (err, recordsdata) trong đó recordsdata là 1 mảng chứa các tên file trong folder.
Ví dụ
Tạo major.js có nội dung sau:
var fs = require("fs");
console.log("Going to learn listing /tmp");
fs.readdir("/tmp/",perform(err, recordsdata) {
if (err) {
return console.error(err);
}
recordsdata.forEach( perform (file) {
console.log( file );
});
});
Chạy major.js để xem kết quả:
$ node major.js
Kiểm tra kết quả:
Going to learn listing /tmp
ccmzx99o.out
ccyCSbkF.out
worker.ser
hsperfdata_apache
check
check.txt
Xóa folder trong Node.js
Cú pháp
Để xóa 1 folder trong Node.js, bạn sử dụng phương thức rmdir() có cú pháp:
fs.rmdir(path, callback)
Chi tiết về tham số :
- path – Là tên folder gồm link trỏ đến folder đó.
- callback – Hàm callback nhận 1 tham số để xử lý trường hợp nếu như có exception.
Ví dụ
Tạo major.js có nội dung sau:
var fs = require("fs");
console.log("Going to delete listing /tmp/check");
fs.rmdir("/tmp/check",perform(err) {
if (err) {
return console.error(err);
}
console.log("Going to learn listing /tmp");
fs.readdir("/tmp/",perform(err, recordsdata) {
if (err) {
return console.error(err);
}
recordsdata.forEach( perform (file) {
console.log( file );
});
});
});
Chạy major.js để xem kết quả:
$ node major.js
Kiểm tra kết quả:
Going to learn listing /tmp
ccmzx99o.out
ccyCSbkF.out
worker.ser
hsperfdata_apache
check.txt