# Синхронное чтение и запись файлов в NodeJS

В данном уроке мы разберемся с синхронной работой с файлами, так как она более простая для понимания.

## Синхронное чтение файла

Для синхронного чтения файла используется метод `readFileSync`. Первым параметром он принимает имя файла или путь к файлу, а вторым - кодировку файла, как правило это `utf8`.

Пусть в папке с нашим скриптом располагается файл `readme.txt`. Давайте прочитаем его текст и выведем на экран:

`let text = fs.readFileSync('readme.txt', 'utf8'); console.log(text);`

Сделайте два файла, текстом которых будут некоторые числа. Напишите скрипт, который прочитает числа из файлов и выведет в консоль сумму этих чисел.

## Синхронная запись файла

Для синхронной записи в файл используется функция `writeFileSync`. Первым параметром она принимает имя файла или путь к нему, а вторым - текст, который мы хотим записать в этот файл:

`fs.writeFileSync('readme.txt', 'text');`

Если файл уже существует, то его текст будет перезаписан. А если файл не существует - то он будет автоматически создан.

Дан объект:

`let obj = { 'file1.txt': 'text1', 'file2.txt': 'text2', 'file3.txt': 'text3', }`

С помощью цикла для каждого элемента объекта создайте файл, именем которого будет свойство элемента, а текстом - значение свойства.

Дан файл с текстом. Запустите таймер, который каждые `5` секунд в конец этого файла будет записывать восклицательный знак.

## Синхронные чтение и запись файла

Можно прочитывать данные из файла, совершать над ними какую-нибудь операцию, а затем записывать обратно.

Для примера давайте прочитаем текст из файла `readme.txt`, добавим ему в конец знак `!` и запишем измененный текст обратно в файл:

`let text = fs.readFileSync('readme.txt', 'utf8'); fs.writeFileSync('readme.txt', text + '!');`

Дан файл, в тексте которого записано некоторое число. Напишите скрипт, который прочитает число из файла, прибавит к нему единицу и запишет новое число обратно в файл.

Даны `3` файла с числами. Напишите скрипт, который прочитает числа из файлов, найдет их сумму и запишет ее в новый файл.

## Исключительные ситуации

При работе с файловой системой могут возникать различные исключительные ситуации. Например, файл может отсутствовать, может отказать жесткий диск, диск может быть переполнен, диск может сломаться и не отвечать, у вас может не быть прав для записи в определенную папку и так далее.

Поэтому любую работу с файловой системой необходимо оборачивать в `try-catch`:

`try { let text = fs.readFileSync('readme.txt', 'utf8'); console.log(text); } catch (err) { console.log('при чтении файла возникла ошибка', err); }`

Попробуйте прочитать несуществующий файл. Убедитесь, что при этом произойдет исключительная ситуация. Допишите ваш код так, чтобы он обрабатывал эту ситуацию.

← →
↑