Работа с файловой системой
Цель
В этом уроке мы научимся работать с директориями и файлами.
Предварительныетребования
Знание основ JavaScript.
Установить Node.js и npm
Умение работать с модулями Node.js
Введение
Для работы с файловой системой есть большое количество методов. Полный список методов можно найти в документации. Каждый метод имеют синхронную и ассинхронную форму. Для того, чтобы вызвать метод в синхронной форме, вконце имени дописывается Sync
.
Для работы с файлами необходимо подключить встроенный модуль required('fs')
.
Работа с директорией
Для создания директории в Node.js используется функции fs.mkdir(path[, mode], callback) и fs.mkdirSync(path[, mode]). В качестве основного аргумента path они принимают путь, по которому необходимо создать директорию.
Чтобы выяснить существует ли уже необходимая директория можно воспользоваться методам fs.existsSync(path) который возвращает true - если файл существует и false - если нет. При этом метод fs.exists(path, callback) считается устаревшим и не рекомендуется к использованию.
Для получения полного пути к директории текущего модуля используют переменную__dirname
Рассмотрим небольшой пример создания директории:
const fs = require('fs');
let dir = __dirname + '/field';
if (!fs.existsSync(dir)) {
fs.mkdirSync(dir);
}
Здесь мы создаем директорию, если она еще не была созданна.
Для удаления директорий есть методы fs.rmdir(path, callback) и fs.rmdirSync(path).
Работа с файлами
1.Запись в файл
Для записи файла используются функции fs.writeFile(file, data[, options], callback) и fs.writeFileSync(file, data[, options]), которые в качестве параметра принимает путь к файлу и записываемые данные:
fs.writeFile("hello.txt","Hello!", function(error){
if(error) throw error; // если возникла ошибка
})
Если файл уже существовал и в него были записанны какие-нибудь данные, то после вызова этого метода, файл будет переписан.
При этом если вы не хотите, чтобы файл был перезаписан, а только дозаписан, то необходимо воспользоваться методами fs.appendFile(file, data[, options], callback) и fs.appendFileSync(file, data[, options]).
Для проверки находится ли по заданному пути файл или директория и получения информации о нем используют методы fs.stat(path, callback) и fs.statSync(path).
Пример работы
fs.stat(__filename, function(err, stats) {
console.log(stats.isFile()); // true
console.log(stats); // информация о файле
});
Переменная __filename
в данном примере возвращает полный путь к файлу модуля в котором была использована.
2. Чтение из файла
Для записи файла используются функции fs.readFile(path[, options], callback) и fs.readFileSync(path[, options]). В метод передается путь к файлу относительно корня проекта или абсолютный путь, а в качестве второго необязательного параметра указывается кодировка для получения текстового содержимого файла. На выходе получаем считанный текст. При асинхронном вызове в качестве третьего параметра передается функция обратного вызова, которая выполняется после завершения чтения.
Пример
fs.readFile('test.txt', {encoding: 'utf-8'}, function(err, data) {
if (err) throw err
console.log(data); // выведет текс, который записан в файле test.txt
})
3. Удаление и переименование файла
Переименовать файл можно с помощью методов fs.rename(oldPath, newPath, callback) и fs.renameSync(oldPath, newPath).
Первым параметром необходимо передать старый путь к файлу, а вторым новый с измененным именем.
Удаление происходит с помощью методов fs.unlink(path, callback) и fs.unlinkSync(path).
Практическое задание
С помощью изученного материала програмно создайте в корне проета папку 'folder' и добавте в нее файл 'test1.txt'. Запишите в него произвольную строку, далее прочтите этот файл, после чего переименуйте на 'test2.txt', допишите в полученный файл еще одну строку и удалите файл.