Το Node παρέχει διαφορετικές επιλογές για εγγραφή σε αρχεία στο σύστημά σας μέσω του ενσωματωμένου fs μονάδα μέτρησης. Αυτά περιλαμβάνουν writeFile(), appendFile(), και createWriteStream().
Όπως πολλές γλώσσες, το Node.js σάς επιτρέπει να επιλέξετε μεταξύ της αντικατάστασης ενός υπάρχοντος αρχείου ή της προσάρτησης σε αυτό. Θα πρέπει επίσης να μάθετε για τις ανταλλαγές μεταξύ της σύνταξης ενός αρχείου με μία κίνηση και της ροής του.
Χρησιμοποιώντας το writeFile()
writeFile() είναι ίσως η πιο εύκολη μέθοδος που μπορείτε να χρησιμοποιήσετε για να γράψετε ένα αρχείο στο Node.
fs.writeFile (όνομα αρχείου, δεδομένα, επανάκληση)
Ακολουθεί ένα παράδειγμα που δείχνει πώς να δημιουργήσετε ένα αρχείο απλού κειμένου χρησιμοποιώντας το writeFile(). Μπορείτε φυσικά να δημιουργήσετε άλλους τύπους αρχείων όπως CSV ή JSON.
συνθ fs = απαιτώ("fs")
fs.writeFile("test.txt", "New content", err => {
αν (λάθος) {
κονσόλα.log (σφάλμα)
}
});
Το writeFile() υποστηρίζει async/wait do αντί να χρησιμοποιείτε επανακλήσεις όπως στο παραπάνω παράδειγμα, μπορείτε να δημιουργήσετε το αρχείο ως εξής.
συνθ fs = απαιτώ("fs").υποσχέσεις
ασυγχρονισμόςλειτουργίαwriteToFile() {
προσπαθήστε {
αναμένω fs.writeFile("test.txt", "New cont")
} σύλληψη (λάθος) {
κονσόλα.log (err);
}
}
writeToFile()
Από προεπιλογή, η writeFile() λειτουργεί αντικαθιστώντας τα περιεχόμενα του καθορισμένου αρχείου με νέο περιεχόμενο, εάν το αρχείο υπάρχει. Ωστόσο, υπάρχουν σημαίες που μπορείτε να χρησιμοποιήσετε για να παρακάμψετε αυτήν τη λειτουργία, όπως:
- r+ - ανοίγει το αρχείο για ανάγνωση και εγγραφή.
- w+ - ανοίγει το αρχείο για ανάγνωση και εγγραφή στην αρχή του αρχείου
- ένα - ανοίγει το αρχείο για εγγραφή στο τέλος του αρχείου.
- α+ - ανοίγει το αρχείο για ανάγνωση και εγγραφή στο τέλος του αρχείου.
Για παράδειγμα, μπορείτε να χρησιμοποιήσετε τη σημαία a+ ως εξής:
συνθ fs = απαιτώ("fs")
fs.writeFile("test.txt", "Νεότερο περιεχόμενο", { σημαία: "a+" }, err => {
αν (λάθος) {
κονσόλα.log (σφάλμα)
}
});
Υπάρχουν πολλές άλλες σημαίες συστήματος αρχείων για τις οποίες μπορείτε να μάθετε στο Τεκμηρίωση κόμβου για τη μονάδα fs.
ο fs Η ενότητα παρέχει επίσης writeFileSync, ο σύγχρονη έκδοση του writeFile().
συνθ fs = απαιτώ("fs")
fs.writeFileSync("test.txt", "Νεότερο περιεχόμενο", { σημαία: "a+" }, err => {
αν (λάθος) {
κονσόλα.log (σφάλμα)
}
});
Χρησιμοποιώντας το createWriteStream()
Το μειονέκτημα της χρήσης writeFile() είναι ότι πρέπει να αποθηκεύσετε όλα τα περιεχόμενα του αρχείου ταυτόχρονα, το οποίο δεν είναι επεκτάσιμο για μεγάλα αρχεία. createWriteStream() Ωστόσο, υποστηρίζει τη διαδοχική γραφή. Αυτό σημαίνει ότι μπορείτε να γράψετε ένα κομμάτι δεδομένων σε ένα αρχείο κάθε φορά. Εδώ είναι το γενικό σύστημα για τη δημιουργία μιας εγγράψιμης ροής.
fs.createWriteStream (διαδρομή, επιλογές)
Ο παρακάτω κώδικας γράφει δεδομένα σε ένα αρχείο κειμένου χρησιμοποιώντας ροές
συνθ fs = απαιτώ("fs")
// δημιουργία μιας εγγράψιμης ροής
αφήνω writeableStream = fs.createWriteStream("test.txt")
// Γράψτε στο αρχείο χρησιμοποιώντας την εγγράψιμη ροή
writeableStream.write("Νέο περιεχόμενο");
Ακολουθεί ένα άλλο παράδειγμα που δείχνει πώς μπορείτε να διοχετεύσετε δεδομένα στην εγγράψιμη ροή. Αυτό το πρόγραμμα εγγράφει όλη την είσοδο από το τερματικό στο αρχείο test.txt εφόσον το τερματικό είναι ανοιχτό.
συνθ fs = απαιτώ("fs")
αφήνω writableStream = fs.createWriteStream("test.txt");
process.stdin.pipe (writableStream);
Εάν εκτελείτε αυτό το πρόγραμμα από τη γραμμή εντολών, μπορείτε να το κλείσετε με Ctrl + d ή Ctrl + c.
Μπορείτε επίσης να γράψετε από άλλο αρχείο στη ροή με δυνατότητα εγγραφής. Εξετάστε το ακόλουθο παράδειγμα:
συνθ fs = απαιτώ("fs")
αφήνω readableStream = fs.createReadStream("test.txt");
αφήνω writableStream = fs.createWriteStream("test2.txt");
readableStream.on("data", λειτουργία(μεγάλο κομμάτι) {
writableStream.write (κομμάτι);
});
Η δημιουργία μιας ευανάγνωστης ροής του αρχείου που θέλετε να αντιγράψετε σάς επιτρέπει να διαβάζετε τα περιεχόμενά του σε κομμάτια. Έτσι, για κάθε κομμάτι που λαμβάνεται, το πρόγραμμα θα γράφει στο αρχείο προορισμού.
Χρησιμοποιώντας το appendFile()
appendFile() είναι μια απλή μέθοδος προσθήκης περιεχομένου στο τέλος του αρχείου. Εδώ είναι ένα παράδειγμα.
συνθ fs = απαιτώ("fs")
fs.appendFile("test.txt", "added content", err => {
αν (λάθος) {
κονσόλα.error (err);
}
});
Μπορείτε επίσης να χρησιμοποιήσετε το async/wait.
συνθ fs = απαιτώ("fs").υποσχέσεις
ασυγχρονισμόςλειτουργίαappendToFile() {
προσπαθήστε {
αναμένω fs.appendFile("test.txt", "προστέθηκε περιεχόμενο")
} σύλληψη (λάθος) {
κονσόλα.log (err);
}
}
appendToFile()
Σαν writeFile(), το appendFile έχει επίσης μια σύγχρονη έκδοση:
fs.appendFileSync("test.txt", "προστέθηκε περιεχόμενο");
Χρησιμοποιήστε ροές για να γράψετε μεγάλα αρχεία
Αυτό το άρθρο εξέτασε διάφορες προσεγγίσεις για τη σύνταξη αρχείων στο Node. Ενώ η writeFile() είναι πολύ απλή, είναι πιο κατάλληλη για μικρά μεγέθη αρχείων, καθώς δεν επιτρέπει διαδοχικές εγγραφές. Εάν έχετε να κάνετε με μεγάλα αρχεία, είναι προτιμότερο να χρησιμοποιείτε εγγράψιμες ροές.