JavaScript · Синтаксис · Початковий рівень

Робота з файлами: читання та запис

10 завдань

Практичні вправи по роботі з файлами JavaScript на Node.js: читання тексту, запис рядків, додавання даних, підрахунок рядків і слів, обробка вмісту файлу і створення простих звітів через модуль fs.

Читання файлів через Node.js fs

#
У Node.js доступ до файлів надає вбудований модуль fs. Підключіть його на початку скрипту: ```javascript const fs = require("fs"); ``` Синхронне читання файлу — readFileSync повертає весь вміст як рядок: ```javascript const content = fs.readFileSync("note.txt", "utf-8"); console.log(content); ``` Другий аргумент — кодування. Без нього readFileSync повертає об'єкт Buffer, а не рядок. Синхронний vs асинхронний: readFileSync блокує виконання, доки файл не буде завантажено. Для скриптів і завдань — це нормально. У продакшн-серверах використовують асинхронну версію (fs.promises.readFile), щоб не блокувати event loop. Читання по рядках — розбиваємо за символом нового рядка: ```javascript const content = fs.readFileSync("tasks.txt", "utf-8"); const lines = content.split("\n"); console.log(lines.length); // кількість рядків for (const line of lines) { console.log(line.trim()); // trim() видаляє пробільні символи і \r на Windows } ``` Якщо файл закінчується символом нового рядка (що є стандартом), останній елемент lines буде порожнім рядком. Відфільтруйте його через lines.filter(l => l.length > 0) за потреби. Перевірка існування файлу перед читанням: ```javascript if (fs.existsSync("data.txt")) { const content = fs.readFileSync("data.txt", "utf-8"); } ```

Запис і дозапис

#
Запис у файл використовує writeFileSync. Якщо файл не існує — Node створює його. Якщо вже існує — writeFileSync повністю перезаписує його. ```javascript fs.writeFileSync("message.txt", "Hello, file!"); ``` Можна передати кодування третім аргументом — але для рядків воно за замовчуванням utf-8, тому зазвичай не потрібне. Запис кількох рядків — з'єднуємо масив символами нового рядка: ```javascript const products = ["bread", "milk", "cheese"]; fs.writeFileSync("shopping.txt", products.join("\n")); ``` Дозапис через appendFileSync додає в кінець файлу, не стираючи існуючий вміст: ```javascript fs.appendFileSync("log.txt", "New entry\n"); ``` Використовуйте appendFileSync для журналів, writeFileSync для файлів, що генеруєте щоразу заново. Вибір має значення: writeFileSync для журналу знищить всі попередні записи. Щоб прочитати файл, змінити вміст і записати назад: ```javascript let content = fs.readFileSync("text.txt", "utf-8"); content = content.toUpperCase(); fs.writeFileSync("text.txt", content); ``` Дві окремі операції — спочатку читання, потім запис. Немає режиму, що безпечно об'єднує обидва.

Патерни обробки файлів

#
Створення файлу з початковим вмістом і читання назад — багато завдань слідують цій двокроковій формі: ```javascript fs.writeFileSync("words.txt", "code javascript file student"); const content = fs.readFileSync("words.txt", "utf-8"); const words = content.split(" "); const longest = words.reduce((a, b) => a.length >= b.length ? a : b); console.log(longest); ``` reduce() із функцією порівняння знаходить найдовше слово без написання окремого циклу. Акумулятор починається з першого елемента. Фільтрація рядків і запис у новий файл: ```javascript const lines = fs.readFileSync("emails.txt", "utf-8").split("\n"); const valid = lines.filter(line => line.includes("@")); fs.writeFileSync("valid_emails.txt", valid.join("\n")); ``` Ланцюжок readFileSync, split і filter в одному виразі — зручно, коли проміжні значення не потрібні пізніше. Запис обчисленого звіту: ```javascript const content = fs.readFileSync("article.txt", "utf-8"); const wordCount = content.split(" ").filter(w => w.length > 0).length; fs.writeFileSync("report.txt", `Word count: ${wordCount}\n`); ``` Шаблонні літерали автоматично перетворюють число на рядок. Конкатенація через + теж працює, але шаблонні літерали читаються зрозуміліше, коли поєднуєте текст і значення.
01

Прочитати весь файл.

#

Створіть файл note.txt з текстом "JavaScript files". Потім прочитайте весь вміст файлу за допомогою модуля fs і виведіть його в консоль.

const fs = require("fs");
const fileName = "note.txt";

Рішення
const fs = require("fs");
const fileName = "note.txt";

fs.writeFileSync(fileName, "JavaScript files", "utf8");

const text = fs.readFileSync(fileName, "utf8");
console.log(text);

// або так можна: прочитати файл одразу в console.log
const fs = require("fs");
const fileName = "note.txt";

fs.writeFileSync(fileName, "JavaScript files", "utf8");
console.log(fs.readFileSync(fileName, "utf8"));
02

Записати рядок у файл.

#

У змінній text зберігається повідомлення. Запишіть це повідомлення у файл message.txt, потім прочитайте файл і виведіть його вміст.

const fs = require("fs");

const text = "Повідомлення для файлу";
const fileName = "message.txt";

Рішення
const fs = require("fs");

const text = "Повідомлення для файлу";
const fileName = "message.txt";

fs.writeFileSync(fileName, text, "utf8");

const result = fs.readFileSync(fileName, "utf8");
console.log(result);
03

Додати рядок у кінець файлу.

#

У файлі log.txt вже є рядок "Start". У змінній newLine зберігається новий рядок. Додайте його в кінець файлу з нового рядка та виведіть підсумковий вміст файлу.

const fs = require("fs");

const fileName = "log.txt";
fs.writeFileSync(fileName, "Start", "utf8");

const newLine = "Next step";
Рішення
const fs = require("fs");

const fileName = "log.txt";
fs.writeFileSync(fileName, "Start", "utf8");

const newLine = "Next step";

fs.appendFileSync(fileName, "\n" + newLine, "utf8");

const text = fs.readFileSync(fileName, "utf8");
console.log(text);
04

Порахувати рядки у файлі.

#

Створіть файл tasks.txt з трьома рядками: "Learn", "Practice", "Repeat". Прочитайте файл і виведіть кількість рядків.

const fs = require("fs");
const fileName = "tasks.txt";
Рішення
const fs = require("fs");
const fileName = "tasks.txt";

fs.writeFileSync(fileName, "Learn\nPractice\nRepeat", "utf8");

const text = fs.readFileSync(fileName, "utf8");
const lines = text.split("\n");

console.log("Кількість рядків:", lines.length);
05

Знайти найдовше слово.

#

Створіть файл words.txt зі словами через пробіл: "code javascript file student". Прочитайте файл і виведіть найдовше слово.

const fs = require("fs");
const fileName = "words.txt";

Рішення
const fs = require("fs");
const fileName = "words.txt";

fs.writeFileSync(fileName, "code javascript file student", "utf8");

const text = fs.readFileSync(fileName, "utf8");
const words = text.split(" ");
let longest = words[0];

for (const word of words) {
    if (word.length > longest.length) {
        longest = word;
    }
}

console.log(longest);
06

Записати список покупок.

#

Є масив покупок: ["хліб", "молоко", "сир"]. Запишіть кожен елемент масиву у файл shopping.txt з нового рядка. Потім прочитайте файл і виведіть його вміст.

const fs = require("fs");

const products = ["хліб", "молоко", "сир"];
const fileName = "shopping.txt";

Рішення
const fs = require("fs");

const products = ["хліб", "молоко", "сир"];
const fileName = "shopping.txt";

const text = products.join("\n");
fs.writeFileSync(fileName, text, "utf8");

const result = fs.readFileSync(fileName, "utf8");
console.log(result);
07

Сума чисел із файлу.

#

Створіть файл numbers.txt, де числа записані через пробіл: 5 10 15 20. Прочитайте файл, порахуйте суму чисел і виведіть результат.

const fs = require("fs");
const fileName = "numbers.txt";
Рішення
const fs = require("fs");
const fileName = "numbers.txt";

fs.writeFileSync(fileName, "5 10 15 20", "utf8");

const text = fs.readFileSync(fileName, "utf8");
const numbers = text.split(" ");
let total = 0;

for (const number of numbers) {
    total += Number(number);
}

console.log("Сума:", total);
08

Фільтр рядків за символом.

#

Створіть файл emails.txt з кількома рядками, частина з яких містить символ @. Прочитайте файл і запишіть лише рядки з @ у новий файл valid_emails.txt. Потім виведіть вміст нового файлу.

const fs = require("fs");

const fileName = "emails.txt";
const resultFile = "valid_emails.txt";

Рішення
const fs = require("fs");

const fileName = "emails.txt";
const resultFile = "valid_emails.txt";

fs.writeFileSync(fileName, "[email protected]\nhello\[email protected]\ntest", "utf8");

const text = fs.readFileSync(fileName, "utf8");
const lines = text.split("\n");
const validLines = [];

for (const line of lines) {
    if (line.includes("@")) {
        validLines.push(line);
    }
}

fs.writeFileSync(resultFile, validLines.join("\n"), "utf8");

const result = fs.readFileSync(resultFile, "utf8");
console.log(result);
09

Перезаписати файл у верхньому регістрі.

#

Створіть файл text.txt з рядком "hello file". Прочитайте вміст, переведіть його у верхній регістр і перезапишіть цей самий файл новим текстом. Потім виведіть підсумковий вміст.

const fs = require("fs");
const fileName = "text.txt";

Рішення
const fs = require("fs");
const fileName = "text.txt";

fs.writeFileSync(fileName, "hello file", "utf8");

let text = fs.readFileSync(fileName, "utf8");
text = text.toUpperCase();

fs.writeFileSync(fileName, text, "utf8");

const result = fs.readFileSync(fileName, "utf8");
console.log(result);
10

Звіт із кількістю слів.

#

Створіть файл article.txt з кількома словами. Прочитайте файл, порахуйте кількість слів і запишіть у файл report.txt рядок виду "Кількість слів: N". Потім виведіть вміст report.txt.

const fs = require("fs");

const articleFile = "article.txt";
const reportFile = "report.txt";
Рішення
const fs = require("fs");

const articleFile = "article.txt";
const reportFile = "report.txt";

fs.writeFileSync(articleFile, "JavaScript helps practice file reading and writing", "utf8");

const text = fs.readFileSync(articleFile, "utf8");
const words = text.trim().split(/\s+/);
const count = words.length;

fs.writeFileSync(reportFile, `Кількість слів: ${count}`, "utf8");

const result = fs.readFileSync(reportFile, "utf8");
console.log(result);