Node zapewnia różne opcje zapisu do plików w twoim systemie za pomocą wbudowanego fs moduł. Obejmują one zapiszPlik(), dołącz plik(), oraz utwórzWriteStream().

Podobnie jak wiele języków, Node.js pozwala wybrać między nadpisaniem istniejącego pliku lub dołączeniem do niego. Powinieneś także dowiedzieć się o kompromisach między pisaniem pliku za jednym razem a przesyłaniem go strumieniowo.

Używanie writeFile()

zapiszPlik() jest prawdopodobnie najłatwiejszą metodą zapisu pliku w Node.

fs.writeFile (nazwa pliku, dane, wywołanie zwrotne)

Oto przykład pokazujący, jak utworzyć zwykły plik tekstowy za pomocą writeFile(). Możesz oczywiście tworzyć inne typy plików, takie jak CSV lub JSON.

stały fs = wymagać("fs")

fs.writeFile("test.txt", "Nowa zawartość", err => {
jeśli (błąd) {
konsola.log (błąd)
}
});

writeFile() obsługuje async/await do zamiast używać wywołań zwrotnych, jak w powyższym przykładzie, możesz utworzyć plik w następujący sposób.

stały fs = wymagać("fs").promises

asynchronicznyfunkcjonowaćzapiszDoPliku()

instagram viewer
{
próbować {
czekać na fs.writeFile("test.txt", "Nowa kontynuacja")
} złapać (błąd) {
konsola.log (błąd);
}
}

zapiszDoPlik()

Domyślnie writeFile() działa poprzez zastąpienie zawartości określonego pliku nową zawartością, jeśli plik istnieje. Istnieją jednak flagi, których można użyć do zastąpienia tej funkcji, takie jak:

  • r+ - otwiera plik do odczytu i zapisu.
  • w+ - otwiera plik do odczytu i zapisu na początku pliku
  • a - otwiera plik do zapisu na końcu pliku.
  • a+ - otwiera plik do odczytu i zapisu na końcu pliku.

Na przykład możesz użyć flagi a+ w ten sposób:

stały fs = wymagać("fs")

fs.writeFile("test.txt", "Nowa treść", { flaga: "a+" }, błąd => {
jeśli (błąd) {
konsola.log (błąd)
}
});

Istnieje wiele innych flag systemu plików, o których można się dowiedzieć w Dokumentacja węzła dla modułu fs.

The fs moduł zapewnia również writeFileSync, wersja synchroniczna z writeFile().

stały fs = wymagać("fs")

fs.writeFileSync("test.txt", "Nowsza treść", { flaga: "a+" }, błąd => {
jeśli (błąd) {
konsola.log (błąd)
}
});

Korzystanie z metody createWriteStream()

Wadą używania zapiszPlik() jest to, że musisz przechowywać całą zawartość pliku na raz, co nie jest skalowalne dla dużych plików. utwórzWriteStream() obsługuje jednak pisanie sekwencyjne. Oznacza to, że możesz zapisywać do pliku jedną porcję danych na raz. Oto ogólny system tworzenia strumienia z możliwością zapisu.

fs.createWriteStream (ścieżka, opcje)

Poniższy kod zapisuje dane do pliku tekstowego za pomocą strumieni

stały fs = wymagać("fs")

// utwórz zapisywalny strumień
wynajmować writeableStream = fs.createWriteStream("test.txt")

// Zapisz do pliku za pomocą zapisywalnego strumienia
writeableStream.write("Nowa zawartość");

Oto kolejny przykład pokazujący, jak można potokować dane do zapisywalnego strumienia. Ten program zapisuje wszystkie dane wejściowe z terminala do pliku test.txt, o ile terminal jest otwarty.

stały fs = wymagać("fs")
wynajmować writeableStream = fs.createWriteStream("test.txt");
process.stdin.pipe (writableStream);

Jeśli uruchomisz ten program z wiersza poleceń, możesz go zakończyć za pomocą Ctrl + D lub Ctrl + C.

Możesz także pisać z innego pliku do strumienia zapisywalnego. Rozważmy następujący przykład:

stały fs = wymagać("fs")
wynajmować readableStream = fs.createReadStream("test.txt");
wynajmować writeableStream = fs.createWriteStream("test2.txt");

readableStream.on("dane", funkcjonować(kawałek) {
writeableStream.write (fragment);
});

Utworzenie czytelnego strumienia pliku, który chcesz skopiować, umożliwia odczytywanie jego zawartości porcjami. Tak więc dla każdego otrzymanego fragmentu program zapisze do pliku docelowego.

Używanie appendFile()

dołącz plik() to prosta metoda dodawania treści na końcu pliku. Oto przykład.

stały fs = wymagać("fs")

fs.appendFile("test.txt", "treść dodana", err => {
jeśli (błąd) {
konsola.błąd (błąd);
}
});

Możesz także użyć asynchronicznego/oczekiwania.

stały fs = wymagać("fs").promises

asynchronicznyfunkcjonowaćdołącz do pliku() {
próbować {
czekać na fs.appendFile("test.txt", "treść dodana")
} złapać (błąd) {
konsola.log (błąd);
}
}

dołączDoPliku()

Tak jak zapiszPlik(), appendFile ma również wersję synchroniczną:

fs.appendFileSync("test.txt", "treść dodana");

Użyj strumieni do zapisu dużych plików

W tym artykule omówiono kilka podejść do pisania plików w węźle. Chociaż funkcja writeFile() jest bardzo prosta, lepiej nadaje się do małych rozmiarów plików, ponieważ nie pozwala na zapisy sekwencyjne. Jeśli masz do czynienia z dużymi plikami, lepiej użyć zapisywalnych strumieni.