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);