Node.js FS — Файлова система

18

Від автора: Node реалізує введення/виведення файлів з використанням простих оболонок для стандартних функцій POSIX. Модуль Node js FS (File System) може бути імпортований з допомогою синтаксису, представленого нижче.

var fs = require(«fs»)

Синхронне та асинхронне форми

Кожен метод модулі fs має як синхронний, так і асинхронну форму. Асинхронні методи приймають в якості останнього параметра функції зворотного виклику завершення і в якості першого параметра функції зворотного виклику — помилки. Більш ефективним є використання асинхронного методу, оскільки він не блокує програму під час її виконання.

Приклад

Створіть текстовий файл з ім’ям input.txt з наступним вмістом:

Tutorials Point is giving self-learning content
to teach the world in simple and easy way!!!!!

Створіть файл з ім’ям js main.js з таким кодом:

var fs = require(«fs»);
// Асинхронне зчитування
fs.readFile(‘input.txt’, function (err, data) {
if (err) {
return console.error(err);
}
console.log(«Asynchronous read:» + data.toString());
});
// Синхронне зчитування
var data = fs.readFileSync(‘input.txt’);
console.log(«Synchronous read:» + data.toString());
console.log(«Program Ended»);

Тепер запустіть main.js:

$ node main.js

В результаті ви повинні отримати наступне.

Synchronous read: Tutorials Point is giving self-learning content
to teach the world in simple and easy way!!!!!
Program Ended
Asynchronous read: Tutorials Point is giving self-learning content
to teach the world in simple and easy way!!!!!

У наступних розділах цієї глави представлений набір практичних прикладів основних методів для роботи з файлами.

Відкриття файлу

Синтаксис. Нижче наведено синтаксис методу для відкриття файлу в асинхронному режимі:

fs.open(path, flags[, режим], callback)

Параметри

Нижче наводиться опис використовуваних параметрів —

path — це рядок з іменем файлу, включаючи шлях до нього.

flags — вказують режим роботи з файлом, який потрібно відкрити. Всі можливі значення наведені нижче.

mode — встановлює режим файлу (права доступу), але тільки якщо файл був створений. За замовчуванням — 0666, читання і запис.

callback — це функція зворотного виклику, яка приймає два аргументи (err, fd).

Flags

Прапори для операцій читання/запису –

r — Відкрити файл для читання. Якщо файл не існує, додається виняток.

г+ — Відкрити файл для читання і запису. Якщо файл не існує, додається виняток.

rs — Відкрити файл для читання в синхронному режимі.

rs+ — Відкрити файл для читання і запису, запросивши в ОС відкрити його в синхронному режимі. Дивіться примітки для «rs» щодо використання даного прапора.

w — Відкрити файл для запису. Файл створюється (якщо він не існує) або скорочується (якщо він існує).

wx — Працює так само як «w», але не виконується, якщо існує шлях.

w+ — Відкрити файл для читання і запису. Якщо файл не існує, то він створюється, якщо файл існує, він скорочується.

wx+ — Працює так само як «w+», але не виконується, якщо існує шлях.

a — Відкрити файл для доповнення. Якщо файл не існує, то він створюється.

ax — Працює як «а», але не виконується, якщо існує шлях.

a+ — Відкрити файл для читання і розширення. Якщо файл не існує, то він створюється.

ах+ — Працює так само як «a+», але не виконується, якщо існує шлях.

Приклад

Створіть файл з ім’ям js main.js, містить наступний код, щоб відкрити файл input.txt для читання і запису.

var fs = require(«fs»);
// Асинхронне відкриття файлу
console.log(«Going to open file!»);
fs.open(‘input.txt’, ‘r+’, function(err, fd) {
if (err) {
return console.error(err);
}
console.log(«opened File successfully!»);
});

Тепер запустіть main.js:

$ node main.js

В результаті ви повинні отримати наступне.

Going to open file!
Opened File successfully!

Отримання інформації про файли

Синтаксис. Нижче наведено синтаксис методу для отримання інформації про файл:

fs.stat(path, callback)

Параметри

Нижче наводиться опис використовуваних параметрів —

path — це рядок з іменем файлу, включаючи шлях до нього.

callback — це функція зворотного виклику, яка приймає два аргументи (err, stats), де stats — це об’єкт типу fs.Stats, який наведено в прикладі нижче.

Крім атрибутів, які наведені в прикладі нижче, у класі fs.Stats міститься кілька важливих методів, які можна використовувати для перевірки типу файлу. Ці методи наведені у наступній таблиці.

stats.isFile() — Повертає true, якщо тип файла — простий файл.

stats.isDirectory() — Повертає true, якщо тип файла — каталог.

stats.isBlockDevice() — Повертає true, якщо тип файла — блочний пристрій.

stats.isCharacterDevice() — Повертає true, якщо тип файла — символьний пристрій.

stats.isSymbolicLink() — Повертає true, якщо тип файла — символьне посилання.

stats.isFIFO() — Повертає true, якщо тип файла — FIFO.

stats.isSocket() — Повертає true, якщо тип файла — сокет.

Приклад

Створіть файл з ім’ям js main.js з таким кодом:

var fs = require(«fs»);
console.log(«Going to get file info!»);
fs.stat(‘input.txt’, function (err, stats) {
if (err) {
return console.error(err);
}
console.log(stats);
console.log(«Got file info successfully!»);
// Перевірка типу файлу
console.log(«isFile ? «+ stats.isFile());
console.log(«isDirectory ? «+ stats.isDirectory());
});

Тепер запустіть main.js:

$ node main.js

В результаті ви повинні отримати наступне.

Going to get file info!
{
dev: 1792,
mode: 33188,
nlink: 1,
uid: 48,
gid: 48,
rdev: 0,
blksize: 4096,
ino: 4318127,
size: 97,
blocks: 8,
atime: Sun Mar 22 2015 13:40:00 GMT-0500 (CDT),
mtime: Sun Mar 22 2015 13:40:57 GMT-0500 (CDT),
ctime: Sun Mar 22 2015 13:40:57 GMT-0500 (CDT)
}
Got file info successfully!
isFile ? true
isDirectory ? false

Запис файлу

Синтаксис. Нижче наведено синтаксис одного із способів запису в файл:

fs.writeFile(filename, data[, options], callback)

Цей метод перезапис файлу, якщо файл вже існує. Якщо ви хочете дописати щось в існуючий файл, ви повинні використовувати інший доступний метод.

Параметри

Нижче наводиться опис використовуваних параметрів —

path — це рядок з іменем файлу, включаючи шлях до нього.

data – це рядок або буфер, які повинні бути записані у файл.

options — Третій параметр — це об’єкт, який містить {encoding, mode, flag}. За замовчуванням encoding — utf8, mode — вісімкове значення 0666 і flag — w,

callback — це функція зворотного виклику, яка отримує єдиний параметр err, який повертає помилку у разі виникнення помилки запису.

Приклад

Створіть файл з ім’ям js main.js, містить наступний код —

var fs = require(«fs»);
console.log(«Going to write into existing file»);
fs.writeFile(‘input.txt’, ‘Simply Easy Learning!’, function(err) {
if (err) {
return console.error(err);
}
console.log(«Data written successfully!»);
console.log(«let’s read newly written data»);
fs.readFile(‘input.txt’, function (err, data) {
if (err) {
return console.error(err);
}
console.log(«Asynchronous read:» + data.toString());
});
});

Тепер запустіть main.js:

$ node main.js

В результаті ви отримаєте наступне.

Going to write existing file into
Data written successfully!
Let’s read newly written data
Asynchronous read: Simply Easy Learning!

Читання файлу

Синтаксис. Нижче наведено синтаксис одного з методів читання з файлу:

fs.read(fd, buffer, offset, length, position, callback)

Цей метод використовує для читання файлу файловий дескриптор. Якщо ви хочете вважати файл безпосередньо, за допомогою імені файлу, використовуйте інший метод.

Параметри

Нижче наводиться опис використовуваних параметрів:

fd — це дескриптор файлу, який повертається функцією fs.open().

buffer — це буфер, в який будуть записані дані.

offset — це зміщення в буфері до позиції початку запису.

length — це ціле число, що визначає кількість прочитаних байтів.

position — Це ціле число, що вказує, з якої позиції повинно починатися читання файлу. Якщо позиція дорівнює нулю, дані будуть зчитуватися з поточної позиції файлу.

callback — це функція зворотного виклику, яка приймає три аргументи (err, bytesRead, buffer).

Приклад

Створіть файл з ім’ям js main.js з таким кодом:

var fs = require(«fs»);
var buf = new Buffer(1024);
console.log(«Going to open an existing file»);
fs.open(‘input.txt’, ‘r+’, function(err, fd) {
if (err) {
return console.error(err);
}
console.log(«opened File successfully!»);
console.log(«Going to read the file»);
fs.read(fd, buf, 0, buf.length, 0, function(err, bytes){
if (err){
console.log(err);
}
console.log(bytes + «read bytes»);
// Виводимо тільки лічені байти.
if(bytes > 0){
console.log(buf.slice(0, bytes).toString());
}
});
});

Тепер запустіть main.js:

$ node main.js

В результаті ви повинні отримати наступне.

Going to open an existing file
Opened File successfully!
Going to read the file
97 read bytes
Tutorials Point is giving self-learning content
to teach the world in simple and easy way!!!!!

Закриття файлу

Синтаксис. Нижче наведено синтаксис для закриття відкритого файлу:

fs.close(fd, callback)

Параметри

Нижче наводиться опис використовуваних параметрів —

fd — це дескриптор файлу, що повертається методом fs.open().

callback — це функція зворотного виклику. функції зворотного виклику завершення не передаються ніякі аргументи, крім можливих винятків.

Приклад

Створіть файл з ім’ям js main.js, містить наступний код:

var fs = require(«fs»);
var buf = new Buffer(1024);
console.log(«Going to open an existing file»);
fs.open(‘input.txt’, ‘r+’, function(err, fd) {
if (err) {
return console.error(err);
}
console.log(«opened File successfully!»);
console.log(«Going to read the file»);
fs.read(fd, buf, 0, buf.length, 0, function(err, bytes){
if (err){
console.log(err);
}
// Виводимо тільки лічені байти.
if(bytes > 0){
console.log(buf.slice(0, bytes).toString());
}
// Закриття відкритого файлу.
fs.close(fd, function(err){
if (err){
console.log(err);
}
console.log(«File closed successfully.»);
});
});
});

Тепер запустіть main.js:

$ node main.js

В результаті ви повинні отримати наступне.

Going to open an existing file
Opened File successfully!
Going to read the file
Tutorials Point is giving self-learning content
to teach the world in simple and easy way!!!!!
File closed successfully.

Усічення файлу

Синтаксис. Нижче наведено синтаксис методу усікання відкритого файлу:

fs.ftruncate(fd, len, callback)

Параметри

Нижче наводиться опис використовуваних параметрів —

fd — це дескриптор файлу, який повертається функцією fs.open().

len — довжина файлу, до якої він буде усічений.

callback — це функція зворотного виклику. Ніякі аргументи крім можливих винятків не передаються функції зворотного виклику завершення.

Приклад

Створіть файл з ім’ям js main.js, містить наступний код:

var fs = require(«fs»);
var buf = new Buffer(1024);
console.log(«Going to open an existing file»);
fs.open(‘input.txt’, ‘r+’, function(err, fd) {
if (err) {
return console.error(err);
}
console.log(«opened File successfully!»);
console.log(«Going to truncate the file after 10 bytes»);
// Усічення відкритого файлу.
fs.ftruncate(fd, 10, function(err){
if (err){
console.log(err);
}
console.log(«File truncated successfully.»);
console.log(«Going to read the same file»);
fs.read(fd, buf, 0, buf.length, 0, function(err, bytes){
if (err){
console.log(err);
}
// Виводимо тільки лічені файли.
if(bytes > 0){
console.log(buf.slice(0, bytes).toString());
}
// Закриття відкритого файлу.
fs.close(fd, function(err){
if (err){
console.log(err);
}
console.log(«File closed successfully.»);
});
});
});
});

Тепер запустіть main.js:

$ node main.js

В результаті ви повинні отримати наступне.

Going to open an existing file
Opened File successfully!
Going to truncate the file after 10 bytes
File truncated successfully.
Going to read the same file
Tutorials
File closed successfully.

Видалення файлу

Синтаксис. Нижче наведено синтаксис методу для видалення файлу:

fs.unlink(path, callback)

Параметри

Нижче наводиться опис використовуваних параметрів —

path — це ім’я файлу, включаючи шлях до нього.

callback — це функція зворотного виклику. Ніякі аргументи крім можливих винятків не передаються функції зворотного виклику завершення.

Приклад

Створимо файл з ім’ям js main.js, містить наступний код:

var fs = require(«fs»);
console.log(«Going to delete an existing file»);
fs.unlink(‘input.txt’, function(err) {
if (err) {
return console.error(err);
}
console.log(«File deleted successfully!»);
});

Тепер запустіть main.js:

$ node main.js

В результаті ви повинні отримати наступне.

Going to delete an existing file
File deleted successfully!

Створення директорії

Синтаксис. Нижче наведено синтаксис методу для створення директорії:

fs.mkdir(path[, режим], callback)

Параметри

Нижче наводиться опис використовуваних параметрів —

path — це ім’я директорії, включаючи шлях до неї.

mode – це права доступу до директорії. За замовчуванням — 0777.

callback — це функція зворотного виклику. Ніякі аргументи крім можливих винятків не передаються функції зворотного виклику завершення.

Приклад

Створіть файл з ім’ям js main.js, має наступний код:

var fs = require(«fs»);
console.log(«Going to create directory /tmp/test»);
fs.mkdir(‘/tmp/test’,function(err){
if (err) {
return console.error(err);
}
console.log(«Directory created successfully!»);
});

Тепер запустіть main.js —

$ node main.js

В результаті ви отримаєте наступне.

Going to create directory /tmp/test
Directory created successfully!

Читання директорії

Синтаксис. Нижче наведено синтаксис методу для читання директорії —

fs.readdir(path, callback)

Параметри

Нижче наводиться опис використовуваних параметрів:

path — це ім’я директорії, включаючи шлях до неї.

callback — це функція зворотного виклику, яка приймає два аргументи (err, files), де files — це масив імен файлів в директорії, не включають «.», а також ‘..’.

Приклад

Створіть файл з ім’ям js main.js, має наступний код:

var fs = require(«fs»);
console.log(«Going to read directory /tmp»);
fs.readdir(«/tmp/»,function(err, files){
if (err) {
return console.error(err);
}
files.forEach( function (file){
console.log( file );
});
});

Тепер запустіть main.js:

$ node main.js

В результаті ви повинні отримати наступне.

Going to read directory /tmp
ccmzx99o.out
ccyCSbkF.out
employee.ser
hsperfdata_apache
test
test.txt

Видалення директорії

Синтаксис. Нижче наведено синтаксис методу для видалення директорії:

fs.rmdir(path, callback)

Параметри

Нижче наводиться опис використовуваних параметрів:

path — це ім’я директорії, включаючи шлях до неї.

callback — це функція зворотного виклику. Ніякі аргументи крім можливих винятків не передаються функції зворотного виклику завершення.

Приклад

Створіть файл з ім’ям js main.js, має наступний код —

var fs = require(«fs»);
console.log(«Going to delete directory /tmp/test»);
fs.rmdir(«/tmp/test»,function(err){
if (err) {
return console.error(err);
}
console.log(«Going to read directory /tmp»);
fs.readdir(«/tmp/»,function(err, files){
if (err) {
return console.error(err);
}
files.forEach( function (file){
console.log( file );
});
});
});

Тепер запустіть main.js:

$ node main.js

В результаті ви повинні отримати наступне.

Going to read directory /tmp
ccmzx99o.out
ccyCSbkF.out
employee.ser
hsperfdata_apache
test.txt