Page 326 - Браун Э. - Изучаем JavaScript. Руководство по созданию современных веб-сайтов - 2017
P. 326
h
fs . readFile (pat . j oin (_dirname , ' h ello . t x ' ) , function ( e rr, da a )
t
t
а
if ( e rr) return console . e rror ( ' Oшибкa при чтении файл . ' ) ;
console . l o ( ' Coдepжимoe файл : ' ) ;
а
g
console . l og ( d at ) ;
a
) ) ;
Если вы запустите этот пример, то можете быть неприятно удивлены результатом.
Содержимое файла :
< Buffer dO 9f dl 8 0 dO Ь8 dO Ь2 dO bS dl 8 2 2 0 dO Ь8 dO Ь7 2 0 4е 6f 64 65 2 1 >
Если преобразовать эти шестнадцатеричные коды в их эквивалент ASCII/Unicode,
то вы обнаружите, что получится текстовая строка Привет из Node ! , но наша про
грамма в ее текущем состоянии не очень дружественна. Если при вызове метода
fs . readFile вы не укажете, какую именно кодировку нужно использовать, то он
возвратит б у фер, содержащий "сырые" двоичные данные. Хотя мы не определяли ко
дировку символов в wri te . j s явно, стандартной кодировкой для символьных строк
j
в JavaScript является UTF-8 (кодировка Unicode). Мы можем изменить файл read. s ,
определив UTF-8, и получить ожидаемый результат.
const fs = require ( ' f s ' ) ;
const path = require ( р а th ' ) ;
'
t
fs . readFile (path . o in (_dirname , ' h ello . tx ' ) ,
j
{ encoding: ' u t f 8 ' ) , function ( e rr, da a )
t
i f ( e rr) return console . error ( ' Oшибкa при чтении файл . ' ) ;
а
а
g
console . l o ( ' Coдepжимoe файл : ' ) ;
a
console . l og ( d at ) ;
) ) ;
У всех функций модуля f s есть синхронные эквиваленты (их имена завершаются
суффиксом "Sync"). В wri te . j s мы можем использовать синхронный эквивалент.
fs . writeFileSync (path . j oin (_dirname , ' h ello . txt ' ) , ' П ривет из Node ! ' ) ;
И в read. j s мы можем использовать синхронный эквивалент.
t
const data = fs . readFileSync ( p ath . j o in (_dirname , ' h ello . t x ' ) ,
encoding : ' u t f 8 ' ) ) ;
Поскольку в синхронных версиях функций обработка ошибок выполняется с ис
пользованием исключений, чтобы сделать наши примеры надежнее, заключим их
t
в блоки r y/catch, например так.
t r y {
e
t
fs . writeFileSync ( p ath . J o in (_dirname , ' h e l l o . t x ' ) , ' П ривет из Nod 1 ' ) ;
(
catch e rr) {
а
console . e rror ( ' Oшибкa при записи файл . ' ) ;
Доступ к файловой системе 329

