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