Node.js dla początkujących - Część 9: Obsługa plików
Mateusz Kędziora

Witajcie, drodzy adepci JavaScriptu! Dziś zanurzymy się w fascynujący świat operacji na plikach w Node.js. Z pomocą wbudowanego modułu fs
(file system – system plików) nauczymy się, jak odczytywać i zapisywać dane, otwierając drzwi do tworzenia interaktywnych aplikacji, serwerów i narzędzi. Gotowi na dawkę wiedzy? Zaczynamy!
Po co nam w ogóle praca z plikami?
Wyobraźcie sobie aplikację, która musi przechowywać dane użytkowników, konfigurację programu, logi błędów czy po prostu treść strony internetowej. Właśnie w takich sytuacjach niezastąpione stają się operacje na plikach. Moduł fs
w Node.js dostarcza nam narzędzi do wykonywania tych zadań sprawnie i efektywnie.
fs
– Twój przyjaciel od plików
Moduł fs
jest wbudowany w Node.js, co oznacza, że nie musimy go instalować oddzielnie. Aby z niego skorzystać, wystarczy go zaimportować:
const fs = require('fs');
Odczyt plików – dwa podejścia
Moduł fs
oferuje dwa sposoby odczytu plików: synchroniczny i asynchroniczny. Zrozumienie różnicy między nimi jest kluczowe dla pisania wydajnych aplikacji.
- Odczyt synchroniczny (blokujący):
Metody synchroniczne blokują wykonywanie programu do momentu zakończenia operacji. Są proste w użyciu, ale mogą spowolnić działanie aplikacji, szczególnie przy dużych plikach. Używamy ich rzadko, ale warto znać. Przykład:
try {
const data = fs.readFileSync('plik.txt', 'utf8'); // 'utf8' określa kodowanie
console.log(data);
} catch (err) {
console.error('Błąd odczytu pliku:', err);
}
- Odczyt asynchroniczny (nieblokujący):
Metody asynchroniczne nie blokują wykonywania programu. Operacja odczytu jest wykonywana w tle, a po jej zakończeniu wywoływana jest funkcja zwrotna (callback). To podejście jest znacznie bardziej wydajne, szczególnie w aplikacjach serwerowych. Przykład:
fs.readFile('plik.txt', 'utf8', (err, data) => {
if (err) {
console.error('Błąd odczytu pliku:', err);
return;
}
console.log(data);
});
console.log("Ten kod wykona się przed odczytaniem pliku!"); //ważne!
Zauważ, że komunikat “Ten kod wykona się przed odczytaniem pliku!” zostanie wyświetlony przed treścią pliku. To właśnie istota asynchroniczności.
Zapis plików
Podobnie jak w przypadku odczytu, mamy do dyspozycji metody synchroniczne i asynchroniczne do zapisu plików:
- Zapis synchroniczny:
try {
fs.writeFileSync('nowy_plik.txt', 'Treść do zapisania', 'utf8');
console.log('Plik zapisany synchronicznie.');
} catch (err) {
console.error('Błąd zapisu pliku:', err);
}
- Zapis asynchroniczny:
fs.writeFile('nowy_plik.txt', 'Treść do zapisania asynchronicznie', 'utf8', (err) => {
if (err) {
console.error('Błąd zapisu pliku:', err);
return;
}
console.log('Plik zapisany asynchronicznie.');
});
Obsługa błędów – podstawa bezpieczeństwa
Zawsze pamiętaj o obsłudze błędów! Operacje na plikach mogą zakończyć się niepowodzeniem z różnych przyczyn (np. brak pliku, brak uprawnień). W powyższych przykładach użyliśmy bloku try...catch
dla metod synchronicznych i funkcji zwrotnej z argumentem err
dla metod asynchronicznych.
Praca domowa
- Stwórz program, który odczyta treść pliku
dane.txt
, zamieni wszystkie litery na wielkie i zapisze wynik do nowego plikudane_wielkie.txt
. Użyj metod asynchronicznych. - Napisz program, który sprawdzi, czy dany plik istnieje. Jeśli tak, wyświetli jego rozmiar w bajtach. Jeśli nie, wyświetli odpowiedni komunikat. Skorzystaj z metody
fs.existsSync()
ifs.stat()
.
Eksperymentuj i odkrywaj!
Zachęcam Was do samodzielnego eksperymentowania z modułem fs
. Spróbujcie różnych operacji, takich jak zmiana nazw plików, usuwanie plików, tworzenie katalogów (foldery). Dokumentacja Node.js jest Waszym najlepszym przyjacielem! Link do dokumentacji: https://nodejs.org/api/fs.html.
Co dalej?
To tylko krótki wstęp do pracy z plikami w Node.js. W kolejnych artykułach zgłębimy bardziej zaawansowane tematy, takie jak pełne wyjaśnienie asynchroniczności czy pierwszy serwer http. Przeczytajcie również moje pozostałe posty o kursie Javascript dla początkujących, gdzie znajdziecie wiele przydatnych informacji.
Mam nadzieję, że ten artykuł był dla Was pomocny. Do zobaczenia wkrótce!
Polecane artykuły
Docker vs Kubernetes: Który dla Ciebie w 2025?
Docker i Kubernetes objaśnione! Która technologia lepsza dla początkujących w 2025? Porównanie, przykłady i przyszłość.
Mateusz Kędziora
DevOps: Automatyzacja zadań sysadmina dla programistów
Zautomatyzuj pracę sysadmina w środowisku DevOps! Praktyczne przykłady, skrypty, Ansible, Terraform, Prometheus i Grafana.
Mateusz Kędziora
Automatyzacja Linux/macOS z Bash: Praktyczny Przewodnik
Zacznij automatyzować system Linux/macOS z Bash! Dowiedz się, czym jest Bash, jak pisać skrypty i używać podstawowych komend.
Mateusz Kędziora