Đọc ghi file text trong javascript
Trong các bài hướng dẫn trước, chúng ta đã sử dụng nhiều lần câu lệnh require("fs"). Đây là cú pháp để khai báo mô-đun fs để có thể gọi các phương thức xử lý File I/O hay đọc nghi file trong Node.js. Cú pháp như sau: Show
Nội dung chính
Khái niệm đồng bộ vs không đồng bộ trong Node.jsMỗi phương thức trong fs Module có các form đồng bộ và các form không đồng bộ. Các phương thức không đồng bộ nhận một tham số cuối cùng là một hàm callback thực thi khi kết thúc và nhận tham số đầu tiên là một hàm callback để xử lý lỗi. Việc sử dụng các phương thức không đồng bộ là tốt hơn các phương thức đồng bộ, bởi vì các 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 input.txt có nội dung: Huong dan doc nghi file trong Node.js Tạo file1.js. Như trên đã trình bày, mỗi phương thức của fs Module đều có hai form là đồng bộ và không đồng bộ. Để đọc dữ liệu, mình sử dụng phương thức readFile() của form không đồng bộ và readFileSync() của form đồ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ừ đó. var fs = require("fs"); // Phuong thuc doc file khong dong bo fs.readFile('input.txt', function (err, data) { if (err) { return console.error(err); } console.log("Phuong thuc doc file khong dong bo: " + data.toString()); }); // Phuong thuc doc file dong bo var data = fs.readFileSync('input.txt'); console.log("Phuong thuc doc file dong bo: " + data.toString()); console.log("Ket thuc chuong trinh."); Chạy file1.js để xem kết quả: Kết quả: Cú pháp Để mở một 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) Chi tiết tham số:
Các Flag được sử dụng cho việc đọc ghi file trong Node.js
Ví dụ Tạo file2.js có nội dung như dưới đây. Nội dung file khá giống ví dụ trên, bạn chú ý vào phần flag đã sử dụng ở đây. var fs = require("fs"); // Hoat dong mo File theo cach thuc khong dong bo console.log("Chuan bi mo File hien tai!"); fs.open('input.txt', 'r+', function(err, fd) { if (err) { return console.error(err); } console.log("File duoc mo thanh cong!"); }); Chạy file2.js để xem kết quả: Kết quả: Đọc thông tin metadata của File trong Node.jsCú pháp Để đọc thông tin của một file trong Node.js, bạn sử dụng phương thức stat() của fs Module: Chi tiết về tham số
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ó một số phương thức hữu ích có thể được sử dụng để kiểm tra kiểu file. Đó là:
Ví dụ Sau đây là ví dụ minh họa cách lấy thông tin về một file nào đó. Tạo file3.js và sử dụng phương thức stat() của fs Module đã trình bày ở trên: var fs = require("fs"); console.log("Chuan bi lay thong tin File hien tai!"); fs.stat('input.txt', function (err, stats) { if (err) { return console.error(err); } console.log(stats); console.log("Lay thong tin File thanh cong!"); // Kiem tra kieu file console.log("isFile ? " + stats.isFile()); console.log("isDirectory ? " + stats.isDirectory()); }); Chạy file3.js để xem kết quả: Kết quả: Ghi file trong Node.jsCú pháp Để ghi dữ liệu vào File trong Node.js, bạn có thể sử dụng phương thức writeFile() của fs Module như sau: fs.writeFile(filename, data[, options], callback) Phương thức này sẽ ghi đè nếu file đã tồn tại. Chi tiết về tham số
Ví dụ Ví dụ sau minh họa cách ghi dữ liệu vào một file. Tạo file4.js có nội dung như sau: var fs = require("fs"); console.log("Chuan bi ghi du lieu vao file hien tai"); fs.writeFile('input.txt', 'Hoc Node.js co ban.', function(err) { if (err) { return console.error(err); } console.log("Ghi du lieu vao file thanh cong!"); console.log("Doc du lieu vua duoc ghi"); fs.readFile('input.txt', function (err, data) { if (err) { return console.error(err); } console.log("Noi dung file: " + data.toString()); }); }); Chạy file4.js để xem kết quả: Kết quả: Đọc dữ liệu từ File trong Node.jsCú pháp Để đọc dữ liệu từ một File, bạn sử dụng phương thức read() có cú pháp sau: fs.read(fd, buffer, offset, length, position, 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 bạn muốn đọc file bởi sử dụng trực tiếp tên file thì bạn nên sử dụng phương thức khác. Chi tiết về tham số
Ví dụ Tạo file5.js có nội dung sau: var fs = require("fs"); var buf = new Buffer(1024); console.log("Chuan bi mo mot File dang ton tai."); fs.open('input.txt', 'r+', function(err, fd) { if (err) { return console.error(err); } console.log("File duoc mo thanh cong!"); console.log("Chuan bi doc du lieu tu File da mo"); fs.read(fd, buf, 0, buf.length, 0, function(err, bytes){ if (err){ console.log(err); } console.log(bytes + " bytes read"); // In so luong byte da doc. if(bytes > 0){ console.log(buf.slice(0, bytes).toString()); } }); }); Chạy file5.js để xem kết quả: Kết quả: Đóng File trong Node.jsCú pháp Để đóng một file sau khi đã mở, bạn sử dụng phương thức close() có cú pháp: Chi tiết về tham số
Ví dụ Tạo file6.js có nội dung: var fs = require("fs"); var buf = new Buffer(1024); console.log("Chuan bi mo mot File dang ton tai"); fs.open('input.txt', 'r+', function(err, fd) { if (err) { return console.error(err); } console.log("File duoc mo thanh cong!"); console.log("Chuan bi doc du lieu tu File da mo"); fs.read(fd, buf, 0, buf.length, 0, function(err, bytes){ if (err){ console.log(err); } // In so luong byte da doc. if(bytes > 0){ console.log(buf.slice(0, bytes).toString()); } // Dong mot File vua duoc mo. fs.close(fd, function(err){ if (err){ console.log(err); } console.log("File duoc dong thanh cong."); }); }); }); Chạy file6.js để xem kết quả: Kết quả: Truncate một File trong Node.jsCú pháp Để truncate một 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ố
Ví dụ Tạo file7.js có nội dung sau: var fs = require("fs"); var buf = new Buffer(1024); console.log("Chuan bi mo mot File dang ton tai"); fs.open('input.txt', 'r+', function(err, fd) { if (err) { return console.error(err); } console.log("File duoc mo thanh cong!"); console.log("Chuan bi truncate file"); // Truncate mot File da duoc mo. fs.ftruncate(fd, 10, function(err){ if (err){ console.log(err); } console.log("File duoc truncate thanh cong."); console.log("Chuan bi doc du lieu tu File"); fs.read(fd, buf, 0, buf.length, 0, function(err, bytes){ if (err){ console.log(err); } // In so luong byte da doc. if(bytes > 0){ console.log(buf.slice(0, bytes).toString()); } // Dong File vua mo. fs.close(fd, function(err){ if (err){ console.log(err); } console.log("File duoc dong thanh cong."); }); }); }); }); Chạy file7.js để xem kết quả: Kết quả: Xóa File trong Node.jsCú pháp Để xóa một 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ố
Ví dụ Tạo file8.js có nội dung sau: var fs = require("fs"); console.log("Chuan bi xoa mot File dang ton tai"); fs.unlink('input.txt', function(err) { if (err) { return console.error(err); } console.log("Xoa File thanh cong!"); }); Chạy file8.js để xem kết quả: Kết quả: Tạo thư mục trong Node.jsCú pháp Để tạo một thư mục 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ố
Ví dụ Tạo file9.js có nội dung sau: var fs = require("fs"); console.log("Chuan bi tao thu muc /usr/nodejs"); fs.mkdir('/tmp/test',function(err){ if (err) { return console.error(err); } console.log("Thu muc duoc tao thanh cong!"); }); Chạy file9.js để xem kết quả: Kết quả: Đọc thư mục trong Node.jsCú pháp Để đọc thư mục 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ố
Ví dụ Tạo file10.js có nội dung sau: var fs = require("fs"); console.log("Chuan bi doc thong tin tu thu muc /tmp"); fs.readdir("/tmp/",function(err, files){ if (err) { return console.error(err); } files.forEach( function (file){ console.log( file ); }); }); Chạy file10.js để xem kết quả: Kết quả: Xóa thư mục trong Node.jsCú pháp Để xóa một thư mục trong Node.js, bạn sử dụng phương thức rmdir() có cú pháp: Chi tiết về tham số
Ví dụ Tạo file11.js có nội dung sau: var fs = require("fs"); console.log("Chuan bi xoa thu muc /tmp/test"); fs.rmdir("/tmp/test", function(err) { if (err) { return console.error(err); } console.log("Chuan bi doc thong tin tu thu muc /tmp"); fs.readdir("/tmp/",function(err, files){ if (err) { return console.error(err); } files.forEach( function (file){ console.log( file ); }); }); }); Chạy file11.js để xem kết quả: Kết quả: |