English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

NodeJS Основы

NodeJS Express.js

NodeJS буфер & URL;

NodeJS MySql

NodeJS MongoDB

NodeJS Файлы (FS)

Другие NodeJS

Файловая система (FS) в Node.js

Node.js FS

Node FS является内置ным модулем Node.js, который помогает вам обрабатывать файлы и выполнять с ними операции.

Операции с файлами NodeJs FS

Используя Node FS, вы можете выполнять следующие операции с файлами:

  • Чтение файла

  • Создавать или заменять файл

  • Обновлять файл

  • удаление файла

  • Переименовывать файл

Node.js предоставляет набор API для файловых операций, аналогичных стандартам UNIX (POSIX). Синтаксис импорта модуля файловой системы Node.js (fs) показан следующим образом:

var fs = require("fs")

Асинхронное и синхронное

Модуль файловой системы Node.js (модуль fs) предоставляет методы как асинхронного, так и синхронного выполнения, например, функции чтения содержимого файла имеют асинхронный fs.readFile() и синхронный fs.readFileSync().

В последнем параметре функции асинхронного метода находится回调 функция, в которой первый параметр содержит информацию об ошибках (error).

Рекомендуется использовать асинхронные методы, так как они имеют лучшую производительность и быстроту, а также не блокируют.

Пример

Создайте файл input.txt с следующим содержимым:

Адрес официального сайта базового руководства: ru.oldtoolbag.com
Пример чтения файла

Создайте файл file.js с следующим кодом:

var fs = require("fs");
// Асинхронное чтение
fs.readFile('input.txt', function(err, data) {
   if (err) {
       return console.error(err);
   }
   console.log("Асинхронное чтение: " + data.toString());
});
// Синхронное чтение
var data = fs.readFileSync('input.txt');
console.log("Синхронное чтение: " + data.toString());
console.log("Программа выполнена.");

Результат выполнения кода выше:

$ node file.js 
Синхронное чтение: адрес основного учебника: ru.oldtoolbag.com
Пример чтения файла
Программа выполнена.
Асинхронное чтение: адрес основного учебника: ru.oldtoolbag.com
Пример чтения файла

Давайте подробнее рассмотрим методы файловой системы Node.js.

Открытие файла

синтаксис

Ниже приведен синтаксис открытия файла в асинхронном режиме:

fs.open(path, flags[, mode], callback)

параметр

Инструкции по использованию параметров:

  • путь - Путь файла.

  • flags - Поведение файла при открытии. Конкретные значения см. в разделе ниже.

  • режим - Установка файла модели (права доступа), по умолчанию при создании файла права доступа 0666 (читаемый, قابل записи).

  • callback - Callback функция, которая принимает два параметра, такие как: callback(err, fd).

Параметр flags может принимать следующие значения:

ФлагОписание
rОткрывает файл в режиме чтения. Если файл не существует, то выбрасывается исключение.
r+Открывает файл в режиме чтения и записи. Если файл не существует, то выбрасывается исключение.
rsЧтение файла синхронным способом.
rs+Чтение и запись файла синхронным способом.
wОткрывает файл в режиме записи, если файл не существует, то создается.
wxАналогично 'w', но если путь файла существует, то запись файла будет неудачной.
w+Открывает файл в режиме чтения и записи, если файл не существует, то создается.
wx+Аналогично 'w+', но если путь файла существует, то чтение и запись файла будут неудачными.
aОткрывает файл в режиме записи, если файл не существует, то создается.
axАналогично 'a', но если путь файла существует, то запись файла будет неудачной.
a+Открывает файл в режиме чтения и записи, если файл не существует, то создается.
ax+Аналогично 'a+', но если путь файла существует, то чтение и запись файла будут неудачными.

Пример

Далее мы создадим файл file.js и откроем файл input.txt для чтения и записи, код следующий:

var fs = require("fs");
// Асинхронное открытие файла
console.log("Подготовка к открытию файла!");
fs.open('input.txt', 'r+', function(err, fd) {
   if (err) {
       return console.error(err);
   }
  console.log("Файл успешно открыт!");     
});

Результат выполнения кода выше:

$ node file.js 
Подготовка к открытию файла!
Успешно открыт файл!

Получение информации о файле

синтаксис

Ниже приведен синтаксис получения информации о файле асинхронным способом:

fs.stat(path, callback)

параметр

Инструкции по использованию параметров:

  • путь - Путь к файлу。

  • callback - Callback функция, которая принимает два параметра, такие как: (err, stats), stats Это объект fs.Stats.

После выполнения fs.stat(path) будет возвращен экземпляр класса stats для его回调 функции. можно использовать методы класса stats для определения свойств файла. Например, определить, является ли это файлом:

var fs = require('fs');
fs.stat('/Users/liuht/code/itbilu/demo/fs.js', function err, stats) {
    console.log(stats.isFile()); // true
})

Методы в классе stats:

МетодОписание
stats.isFile(),Если это файл, верните true,否则 верните false.
stats.isDirectory(),Если это директория, верните true,否则 верните false.
stats.isBlockDevice(),Если это блочное устройство, верните true,否则 верните false.
stats.isCharacterDevice(),Если это символьное устройство, верните true,否则 верните false.
stats.isSymbolicLink(),Если это символическая ссылка, верните true,否则 верните false.
stats.isFIFO(),Если это FIFO, верните true,否则 верните false. FIFO — это особый тип командной трубы в UNIX.
stats.isSocket(),Если это Socket, верните true,否则 верните false.

Пример

Далее мы создаем файл file.js с следующим кодом:

var fs = require("fs");
console.log("Подготовка к открытию файла!");
fs.stat('input.txt', function err, stats) {
   if (err) {
       return console.error(err);
   }
   console.log(stats);
   console.log("Успешно прочитана информация о файле!");
   
   // Проверка типа файла
   console.log("Я ли файл (isFile)? " + stats.isFile());
   console.log("Я ли директория (isDirectory)? " + stats.isDirectory());    
});

Результат выполнения кода выше:

$ node file.js 
Подготовка к открытию файла!
{ dev: 16777220,
  mode: 33188,
  nlink: 1,
  uid: 501,
  gid: 20,
  rdev: 0,
  blksize: 4096,
  ino: 40333161,
  size: 61,
  blocks: 8,
  atime: Пн Sep 07 2015 17:43:55 GMT+0800 (CST),
  mtime: Пн Sep 07 2015 17:22:35 GMT+0800 (CST),
  ctime: Пн Sep 07 2015 17:22:35 GMT+0800 (CST)
Успешно прочитано информацию о файле!
Является ли это файлом (isFile) ? true
Является ли это каталогом (isDirectory) ? false

Запись файла

синтаксис

Ниже приведен формат синтаксиса записи файла в асинхронном режиме:

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

writeFile по умолчанию открывает файл в w режим, поэтому если файл существует, содержимое, записанное этим методом, будет overwrite старого файла.

параметр

Инструкции по использованию параметров:

  • file - Имя файла или дескриптор файла.

  • data - Данные для записи в файл, может быть String (строка) или Buffer (буфер).

  • options - Этот параметр является объектом, содержащим {encoding, mode, flag}. По умолчанию кодировка utf8, режим 0666, flag 'w'.

  • callback - Кallback функция, которая содержит только параметр ошибки (err), возвращается при ошибке записи.

Пример

Далее мы создаем файл file.js с следующим кодом:

var fs = require("fs");
console.log("Подготовка к записи файла");
fs.writeFile('input.txt', 'Содержимое файла, записанного через fs.writeFile', function(err) {
   if (err) {
       return console.error(err);
   }
   console.log("Успешно записано!");
   console.log("--------Я являюсь разделителем-------------")
   console.log("Чтение записанных данных!");
   fs.readFile('input.txt', function(err, data) {
      if (err) {
         return console.error(err);
      }
      console.log("Асинхронное чтение данных файла: " + data.toString());
   });
});

Результат выполнения кода выше:

$ node file.js 
Подготовка к записи файла
Успешно записано!
--------Я являюсь разделителем-------------
Чтение записанных данных!
Асинхронное чтение данных файла: содержимое файла, записанного через fs.writeFile

Чтение файла

синтаксис

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

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

Этот метод использует файловый дескриптор для чтения файла.

параметр

Инструкции по использованию параметров:

  • fd - Файловый дескриптор, возвращаемый методом fs.open().

  • buffer - Буфер для записи данных.

  • offset - Смещение записи в буфере.

  • length - Количество байт для чтения из файла.

  • position - Начальная позиция чтения файла, если значение position равно null, то чтение будет производиться с текущей позиции указателя файла.

  • callback - Кallback функция,有三个参数err, bytesRead, buffer,err это информация об ошибке, bytesRead это количество считанных байт, buffer это объект буфера.

Пример

Содержимое файла input.txt:

Адрес официального сайта базового руководства: ru.oldtoolbag.com

Далее мы создаем файл file.js с следующим кодом:

var fs = require("fs");
var buf = new Buffer.alloc(1024);
console.log("Подготовка к открытию существующего файла!");
fs.open('input.txt', 'r+', function(err, fd) {
   if (err) {
       return console.error(err);
   }
   console.log("Файл успешно открыт!");
   console.log("Подготовка к чтению файла:");
   fs.read(fd, buf, 0, buf.length, 0, function(err, bytes) {
      if (err) {
         console.log(err);
      }
      console.log(bytes + "    байт было считано");
      
      // Выводить только считанные байты
      if (bytes > 0) {
         console.log(buf.slice(0, bytes).toString());
      }
   });
});

Результат выполнения кода выше:

$ node file.js 
Подготовка к открытию существующего файла!
Успешно открыт файл!
Подготовка к чтению файла:
Чтены 42 байта
Адрес официального сайта базового руководства: ru.oldtoolbag.com

Закрывать файл

синтаксис

Следующий формат синтаксиса для закрытия файла в асинхронном режиме:

fs.close(fd, callback)

Этот метод использует файловый дескриптор для чтения файла.

параметр

Инструкции по использованию параметров:

  • fd - Файловый дескриптор, возвращаемый методом fs.open().

  • callback - Функция回调, без параметров.

Пример

Содержимое файла input.txt:

Адрес официального сайта базового руководства: ru.oldtoolbag.com

Далее мы создаем файл file.js с следующим кодом:

var fs = require("fs");
var buf = new Buffer.alloc(1024);
console.log("Подготовка к открытию файла!");
fs.open('input.txt', 'r+', function(err, fd) {
   if (err) {
       return console.error(err);
   }
   console.log("Файл успешно открыт!");
   console.log("Подготовка к чтению файла!");
   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("Файл успешно закрыт");
      });
   });
});

Результат выполнения кода выше:

$ node file.js 
Подготовка к открытию файла!
Успешно открыт файл!
Подготовка к чтению файла!
Адрес официального сайта базового руководства: ru.oldtoolbag.com
Успешно закрыт файл

Вырезать файл

синтаксис

Следующий формат синтаксиса для вырезания файла в асинхронном режиме:

fs.ftruncate(fd, len, callback)

Этот метод использует файловый дескриптор для чтения файла.

параметр

Инструкции по использованию параметров:

  • fd - Файловый дескриптор, возвращаемый методом fs.open().

  • len - Длина вырезаемого файла.

  • callback - Функция回调, без параметров.

Пример

Содержимое файла input.txt:

site:ru.oldtoolbag.com

Далее мы создаем файл file.js с следующим кодом:

var fs = require("fs");
var buf = new Buffer.alloc(1024);
console.log("Подготовка к открытию файла!");
fs.open('input.txt', 'r+', function(err, fd) {
   if (err) {
       return console.error(err);
   }
   console.log("Файл успешно открыт!");
   console.log("Удалены все содержимое файла за пределами 10 байт.");
   
   // Вырезать файл
   fs.ftruncate(fd, 10, function(err) {
      if (err) {
         console.log(err);
      } 
      console.log("Успешно вырезан файл.");
      console.log("Файл успешно считан."); 
      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("Файл успешно закрыт!");
         });
      });
   });
});

Результат выполнения кода выше:

$ node file.js 
Подготовка к открытию файла!
Успешно открыт файл!
Вырезано содержимое файла в 10 байтах, превышающие часть будет удалена.
Успешно вырезан файл.
Чтение того же файла
site:www.r
Успешно закрыт файл

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

синтаксис

Ниже приведен формат синтаксиса для удаления файла:

fs.unlink(path, callback)

параметр

Инструкции по использованию параметров:

  • путь - Путь к файлу。

  • callback - Функция回调, без параметров.

Пример

Содержимое файла input.txt:

site:ru.oldtoolbag.com

Далее мы создаем файл file.js с следующим кодом:

var fs = require("fs");
console.log("Подготовка к удалению файла!");
fs.unlink('input.txt', function(err) {
   if (err) {
       return console.error(err);
   }
   console.log("Удаление файла успешно!");
});

Результат выполнения кода выше:

$ node file.js 
Подготовка к удалению файла!
Удаление файла успешно!

Затем проверьте файл input.txt, и вы会发现, что он больше не существует.

создание каталога

синтаксис

Ниже приведен формат синтаксиса для создания каталога:

fs.mkdir(path[, options], callback)

параметр

Инструкции по использованию параметров:

  • путь - Путь к файлу。

  • Параметр options может быть:

    • recursive - Создание каталога с помощью рекурсии, по умолчанию false.

    • режим - Установка прав доступа к каталогу, по умолчанию 0777.

  • callback - Функция回调, без параметров.

Пример

Далее мы создаем файл file.js с следующим кодом:

var fs = require("fs");
// Каталог /tmp должен существовать
console.log("Создайте каталог /tmp/test/");
fs.mkdir("/tmp/test/", function(err) {
   if (err) {
       return console.error(err);
   }
   console.log("Каталог успешно создан.");
});

Результат выполнения кода выше:

$ node file.js 
Создайте каталог /tmp/test/
Каталог успешно создан.

Можно добавить параметр recursive: true, и не важно, существуют ли каталоги /tmp и /tmp/a:

fs.mkdir('/tmp/a/apple', { recursive: true }, (err) => {
  if (err) throw err;
});

чтение каталога

синтаксис

Ниже приведен формат синтаксиса для чтения каталога:

fs.readdir(path, callback)

параметр

Инструкции по использованию параметров:

  • путь - Путь к файлу。

  • callback - Функция回调, которая принимает два параметра err, files, где err - это информация об ошибке, а files - это список файлов в каталоге.

Пример

Далее мы создаем файл file.js с следующим кодом:

var fs = require("fs");
console.log("Просмотрите каталог /tmp");
fs.readdir("/tmp/",function(err, files){
   if (err) {
       return console.error(err);
   }
   files.forEach(function(file){
       console.log(file);
   });
});

Результат выполнения кода выше:

$ node file.js 
Просмотрите каталог /tmp
input.out
output.out
test
test.txt

удаление каталога

синтаксис

Ниже приведен формат синтаксиса для удаления каталога:

fs.rmdir(path, callback)

параметр

Инструкции по использованию параметров:

  • путь - Путь к файлу。

  • callback - Функция回调, без параметров.

Пример

Далее мы создаем файл file.js с следующим кодом:

var fs = require("fs");
// Создание пустого каталога /tmp/test перед выполнением
console.log("Подготовка к удалению каталога /tmp/test");
fs.rmdir("/tmp/test",function(err){
   if (err) {
       return console.error(err);
   }
   console.log("Чтение каталога /tmp");
   fs.readdir("/tmp/",function(err, files){
      if (err) {
          return console.error(err);
      }
      files.forEach(function(file){
          console.log(file);
      });
   });
});

Результат выполнения кода выше:

$ node file.js 
Подготовка к удалению каталога /tmp/test
Чтение каталога /tmp
……

Руководство по методам модуля файлов

Ниже приведен список методов модуля файлов Node.js:

НомерМетод & описание
1fs.rename(oldPath, newPath, callback)
Асинхронный rename(). Функция回调 не имеет параметров, но может выбросить исключение.
2fs.ftruncate(fd, len, callback)
Асинхронный ftruncate(). Функция回调 не имеет параметров, но может выбросить исключение.
3fs.ftruncateSync(fd, len)
Синхронный ftruncate()
4fs.truncate(path, len, callback)
Асинхронный truncate(). Функция回调 не имеет параметров, но может выбросить исключение.
5fs.truncateSync(path, len)
Синхронный truncate()
6fs.chown(path, uid, gid, callback)
Асинхронный chown(). Функция回调 не имеет параметров, но может выбросить исключение.
7fs.chownSync(path, uid, gid)
Синхронный chown()
8fs.fchown(fd, uid, gid, callback)
Асинхронный fchown(). Функция回调 не имеет параметров, но может выбросить исключение.
9fs.fchownSync(fd, uid, gid)
Синхронная функция fchown()
10fs.lchown(path, uid, gid, callback)
Асинхронная функция lchown(). Функция-callback не имеет параметров, но может抛ить исключение.
11fs.lchownSync(path, uid, gid)
Синхронная функция lchown().
12fs.chmod(path, mode, callback)
Асинхронная функция chmod(). Функция-callback не имеет параметров, но может抛ить исключение.
13fs.chmodSync(path, mode)
Синхронная функция chmod().
14fs.fchmod(fd, mode, callback)
Асинхронная функция fchmod(). Функция-callback не имеет параметров, но может抛ить исключение.
15fs.fchmodSync(fd, mode)
Синхронная функция fchmod().
16fs.lchmod(path, mode, callback)
Асинхронная функция lchmod(). Функция-callback не имеет параметров, но может抛ить исключение. Доступно только на Mac OS X.
17fs.lchmodSync(path, mode)
Синхронная функция lchmod().
18fs.stat(path, callback)
Асинхронная функция stat(). Функция-callback имеет два параметра err, stats, stats является объектом fs.Stats.
19fs.lstat(path, callback)
Асинхронная функция lstat(). Функция-callback имеет два параметра err, stats, stats является объектом fs.Stats.
20fs.fstat(fd, callback)
Асинхронная функция fstat(). Функция-callback имеет два параметра err, stats, stats является объектом fs.Stats.
21fs.statSync(path)
Синхронная функция stat(). Возвращает экземпляр fs.Stats.
22fs.lstatSync(path)
Синхронная функция lstat(). Возвращает экземпляр fs.Stats.
23fs.fstatSync(fd)
Синхронная функция fstat(). Возвращает экземпляр fs.Stats.
24fs.link(srcpath, dstpath, callback)
Асинхронная функция link(). Функция-callback не имеет параметров, но может抛ить исключение.
25fs.linkSync(srcpath, dstpath)
Синхронное link().
26fs.symlink(srcpath, dstpath[, type], callback)
Асинхронное symlink(). Функция回调 не имеет параметров, но может выбросить исключение. Параметр type можно установить в 'dir', 'file', или 'junction' (по умолчанию 'file').
27fs.symlinkSync(srcpath, dstpath[, type])
Синхронное symlink().
28fs.readlink(path, callback)
Асинхронное readlink(). Функция回调 имеет два параметра err, linkString.
29fs.realpath(path[, cache], callback)
Асинхронное realpath(). Функция回调 имеет два параметра err, resolvedPath.
30fs.realpathSync(path[, cache])
Синхронное realpath(). Возвращает абсолютный путь.
31fs.unlink(path, callback)
Асинхронное unlink(). Функция回调 не имеет параметров, но может выбросить исключение.
32fs.unlinkSync(path)
Синхронное unlink().
33fs.rmdir(path, callback)
Асинхронное rmdir(). Функция回调 не имеет параметров, но может выбросить исключение.
34fs.rmdirSync(path)
Синхронное rmdir().
35fs.mkdir(path[, mode], callback)
Асинхронное mkdir(2). Функция回调 не имеет параметров, но может выбросить исключение. По умолчанию права доступа 0777.
36fs.mkdirSync(path[, mode])
Синхронное mkdir().
37fs.readdir(path, callback)
Асинхронное readdir(3). Чтение содержимого каталога.
38fs.readdirSync(path)
Синхронное readdir(). Возвращает список массива файлов.
39fs.close(fd, callback)
Асинхронное close(). Функция回调 не имеет параметров, но может выбросить исключение.
40fs.closeSync(fd)
Синхронное close().
41fs.open(path, flags[, mode], callback)
Асинхронное открытие файла.
42fs.openSync(path, flags[, mode])
Синхронная версия fs.open().
43fs.utimes(path, atime, mtime, callback)
 
44fs.utimesSync(path, atime, mtime)
Изменение времени создания файла, файла указанного по пути.
45fs.futimes(fd, atime, mtime, callback)
 
46fs.futimesSync(fd, atime, mtime)
Изменение времени создания файла, указанного файловым дескриптором.
47fs.fsync(fd, callback)
Асинхронная fsync. Возвратный функционал не имеет параметров, но может вызывать исключения.
48fs.fsyncSync(fd)
Синхронная fsync.
49fs.write(fd, buffer, offset, length[, position], callback)
Запись содержимого буфера в файл, указанный файловым дескриптором.
50fs.write(fd, data[, position[, encoding]], callback)
Запись содержимого буфера в файл, указанный файловым дескриптором fd.
51fs.writeSync(fd, buffer, offset, length[, position])
Синхронная версия fs.write().
52fs.writeSync(fd, data[, position[, encoding]])
Синхронная версия fs.write().
53fs.read(fd, buffer, offset, length, position, callback)
Чтение содержимого файла через файловый дескриптор fd.
54fs.readSync(fd, buffer, offset, length, position)
Синхронная версия fs.read.
55fs.readFile(filename[, options], callback)
Асинхронное чтение содержимого файла.
56fs.readFileSync(filename[, options])
Синхронная версия fs.readFile.
57fs.writeFile(filename, data[, options], callback)
异步写入文件内容。
58fs.writeFileSync(filename, data[, options])
同步版的fs.writeFile。
59fs.appendFile(filename, data[, options], callback)
异步追加文件内容。
60fs.appendFileSync(filename, data[, options])
The同步version of fs.appendFile.
61fs.watchFile(filename[, options], listener)
查看文件的修改。
62fs.unwatchFile(filename[, listener])
停止查看filename的修改。
63fs.watch(filename[, options][, listener])
查看filename的修改,filename可以是文件或目录。返回fs.FSWatcher对象。
64fs.exists(path, callback)
检测给定的路径是否存在。
65fs.existsSync(path)
同步版的fs.exists.
66fs.access(path[, mode], callback)
测试指定路径用户权限。
67fs.accessSync(path[, mode])
同步版的fs.access。
68fs.createReadStream(path[, options])
返回ReadStream对象。
69fs.createWriteStream(path[, options])
返回WriteStream对象。
70fs.symlink(srcpath, dstpath[, type], callback)
异步symlink().回调函数没有参数,但可能抛出异常。

更多内容,请查看官网文件模块描述:文件系统