Podręcznik
Operacje na plikach w Node.js
Wczytywanie plików
Do asynchronicznego wczytywania plików służy funkcja readFile z API promises modułu fs:
readFile([nazwa_pliku], [kodowanie])
Funkcja ta zwraca obiekt typu promise. Można jej użyć np. w następujący sposób:
const { readFile } = require('fs').promises;
readFile("my_file.txt", "utf-8").then(fileContents => {
// Przetwarzanie treści pliku, zawartej w zmiennej fileContents:
console.log(fileContents);
}).catch(rejectionReason => {
// Poniższa instrukcja zostanie wywołana, jeśli
// nie uda się wczytać pliku:
console.error(rejectionReason);
});
readFile("my_file.txt", "utf-8").then(fileContents => {
// Przetwarzanie treści pliku, zawartej w zmiennej fileContents:
console.log(fileContents);
}).catch(rejectionReason => {
// Poniższa instrukcja zostanie wywołana, jeśli
// nie uda się wczytać pliku:
console.error(rejectionReason);
});
Bez promises
W module fs jest jeszcze inna funkcja readFile, poza API promises, która również działa asynchronicznie, ale z wykorzystaniem funkcji callback:
readFile([nazwa_pliku], [kodowanie], [callback]);
Można jej używać np. w następujący sposób:
const fs = require('fs');
fs.readFile("my_file.txt", "utf-8", (err, fileContents) => {
// "Wyrzucenie" błędu, który mógł wystąpić przy próbie wczytania pliku:
if (err) throw err;
// Przetwarzanie treści pliku, zawartej w zmiennej fileContents:
console.log(fileContents);
});
fs.readFile("my_file.txt", "utf-8", (err, fileContents) => {
// "Wyrzucenie" błędu, który mógł wystąpić przy próbie wczytania pliku:
if (err) throw err;
// Przetwarzanie treści pliku, zawartej w zmiennej fileContents:
console.log(fileContents);
});
Buffer
Jeśli nie poda się sposobu kodowania – drugiego argumentu funkcji readFile – otrzyma się zmienną klasy Buffer, czyli sekwencję bajtów. Wypisanie zawartości takiej zmiennej wprost za pomocą polecenia console.log(data) nie daje czytelnego efektu:
const { readFile } = require('fs').promises;
// Brak drugiego argumentu - sposobu kodowania:
readFile("my_file.txt").then(fileContents => {
console.log(fileContents);
});
// Brak drugiego argumentu - sposobu kodowania:
readFile("my_file.txt").then(fileContents => {
console.log(fileContents);
});
<Buffer 53 65 67 72 65 67 75 6a 20 c5 9b 6d 69 65 63 69>