Ví dụ
ứng dụng. js
const readline = require['readline'];
const fs = require['fs'];
var file = 'path.to.file';
var rl = readline.createInterface[{
input: fs.createReadStream[file],
output: process.stdout,
terminal: false
}];
rl.on['line', function [line] {
console.log[line] // print the content of the line on each linebreak
}];
Cách sử dụng
ứng dụng nút
Việc thêm vào tệp rất tiện lợi khi bạn không muốn ghi đè lên tệp bằng nội dung mới mà muốn thêm vào tệp đó
ví dụ
Một phương pháp hữu ích để nối nội dung vào cuối tệp là
4 [và đối tác của nó làJScopy
5]JScopy
Trong Khoa học máy tính, tệp là tài nguyên được sử dụng để ghi dữ liệu một cách riêng biệt trong thiết bị lưu trữ của máy tính. Nút. js không ghi đè điều này theo bất kỳ cách nào và hoạt động với mọi thứ được coi là tệp trong hệ thống tệp của bạn
Đọc tệp và tài nguyên có nhiều cách sử dụng
- Thống kê, phân tích và báo cáo
- Học máy
- Xử lý các tệp văn bản hoặc nhật ký lớn
Đôi khi, những tệp này có thể lớn một cách vô lý, với hàng gigabyte hoặc terabyte được lưu trữ và việc đọc toàn bộ chúng là không hiệu quả
Khả năng đọc từng dòng tệp cho chúng tôi khả năng chỉ tìm kiếm thông tin có liên quan và dừng tìm kiếm khi chúng tôi đã tìm thấy những gì chúng tôi đang tìm kiếm. Nó cũng cho phép chúng tôi chia dữ liệu thành các phần hợp lý, chẳng hạn như nếu tệp có định dạng CSV
Readline [từ v0. 12 trở lên]
Nút. js có mô-đun gốc để đọc các tệp cho phép chúng tôi đọc từng dòng. Nó đã được thêm vào năm 2015 và được dùng để đọc từ bất kỳ dòng
const fs = require['fs'];
2 nào mỗi lần một dòngThực tế này làm cho nó trở thành một tùy chọn linh hoạt, không chỉ phù hợp với các tệp mà còn phù hợp với cả các đầu vào dòng lệnh như
const fs = require['fs'];
3. Tài liệu về mô-đun const fs = require['fs'];
4 có thể được tìm thấy tại đâyVì
const fs = require['fs'];
4 là một mô-đun gốc. Bạn không cần phải sử dụng const fs = require['fs'];
6 cho bất kỳ trình quản lý gói nào khác để thêm nó, chỉ cần const fs = require['fs'];
7const readline = require['readline'];
và bạn tốt để đi
Vì phương thức
const fs = require['fs'];
4 phải được cung cấp cùng với một luồng, trước tiên chúng tôi phải tạo nó bằng cách sử dụng một mô-đun gốc khác - const fs = require['fs'];
9const fs = require['fs'];
Bước tiếp theo là tạo đối tượng sẽ đọc từ luồng bằng hàm
30JScopy
3JScopy
Đảm bảo rằng bạn thay thế
31 bằng đường dẫn thực tới một tệp trong hệ thống tệp của bạnJScopy
Khi quá trình chuẩn bị hoàn tất - việc đọc từng dòng tệp và in nội dung của nó ra bảng điều khiển có thể được thực hiện bằng cách
6JScopy
Về cơ bản, ở đây chúng ta đang nói rằng bất cứ khi nào sự kiện
32 xảy ra trongJScopy
33, nó sẽ gọi hàm của chúng ta và truyền cho nó nội dung được đọc từ luồng. Trong trường hợp của chúng tôi, chúng tôi không muốn phức tạp hóa mọi thứ và chỉ cần in nó ra bàn điều khiểnJScopy
đầu đọc dòng
Sau phần giải thích chi tiết về cách bạn có thể đọc từng dòng tệp bằng nút gốc. js, hãy xem phiên bản ngắn hơn của nó bằng cách sử dụng mô-đun trình đọc dòng nguồn mở từ npm
Vì đây là một mô-đun không phải bản địa, chúng tôi cần đảm bảo rằng chúng tôi đã khởi tạo dự án npm theo cách phù hợp với
34 và sau đó cài đặt nóJScopy
0JScopy
Điều này sẽ cài đặt phần phụ thuộc và thêm nó vào tệp
35JScopy
Sau khi hoàn tất, việc đọc từng dòng một tệp chỉ tương tự như ví dụ trước mà không cần tạo
33 ở giữaJScopy
Hãy xem hướng dẫn thực hành, thực tế của chúng tôi để học Git, với các phương pháp hay nhất, tiêu chuẩn được ngành chấp nhận và bao gồm bảng gian lận. Dừng các lệnh Git trên Google và thực sự tìm hiểu nó
3JScopy
Một tính năng khá hữu ích ở đây là dừng đọc khi một số điều kiện trở thành sự thật. Điều này đạt được bằng cách trả lại
37 từ chức năng gọi lạiJScopy
Ví dụ: chúng tôi có thể đọc từng dòng một tệp cho đến khi chúng tôi tìm thấy một dòng có từ "STOP" trong đó
Có một cách tiếp cận hơi khác, sử dụng hai lệnh gọi lại lồng nhau và cú pháp có vẻ tự nhiên hơn đối với các nhà phát triển Java ngoài kia
5JScopy
Ở đây, chúng tôi đang sử dụng chức năng
38, chức năng này không cung cấp cho chúng tôi các dòng từ một tệp ngay lập tức, nhưng nó cung cấp cho chúng tôi mộtJScopy
39. Nó có bộ chức năng riêng nhưJScopy
60 vàJScopy
61 cho phép chúng tôi kiểm soát nhiều hơn một chút đối với quá trình đọc từng dòng tệp trong Node. jsJScopy
N-readlines
Một cú pháp khác được cung cấp bởi mô-đun npm
62JScopy
Hãy cài đặt nó
const fs = require['fs'];
1Và yêu cầu nó
const fs = require['fs'];
2Để có thể đọc từ một tệp, chúng ta nên tạo một đối tượng mới, cung cấp đường dẫn đến tệp của chúng tôi làm đối số
const fs = require['fs'];
3Việc lấy các dòng từ tệp được thực hiện bằng cách gọi hàm
63JScopy
const fs = require['fs'];
0Một chức năng thú vị của mô-đun
62 làJScopy
65. Nó đặt lại con trỏ và bắt đầu quá trình đọc từ đầu tệpJScopy
Ghi chú. Nó chỉ hoạt động nếu không đạt được kết thúc
Lỗi thường gặp
Một lỗi phổ biến khi đọc từng dòng tệp trong Node. js đang đọc toàn bộ tệp vào bộ nhớ và sau đó chia nhỏ nội dung của nó bằng cách ngắt dòng
Đây là một ví dụ không chính xác có thể làm quá tải hệ thống của bạn nếu bạn cung cấp cho nó một tệp đủ lớn
const fs = require['fs'];
1Thoạt nhìn, có vẻ như đầu ra giống nhau đối với phương pháp này cũng như đối với các phương pháp trước đó và trên thực tế, nó hoạt động tốt đối với các tệp nhỏ. Nhưng hãy tiếp tục và thử làm việc với một công ty lớn. Đó chắc chắn không phải là thứ bạn muốn thấy trong hệ thống sản xuất của mình
Phần kết luận
Có nhiều cách để đọc từng dòng tệp trong Node. js và việc lựa chọn cách tiếp cận phù hợp hoàn toàn là quyết định của lập trình viên
Bạn nên nghĩ đến kích thước của các tệp bạn định xử lý, các yêu cầu về hiệu suất, kiểu mã và các mô-đun đã có trong dự án. Đảm bảo kiểm tra một số trường hợp góc như tệp lớn, trống hoặc không tồn tại và bạn sẽ thấy ổn với bất kỳ ví dụ nào được cung cấp