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
   321   322   323   324   325   326   327   328   329   330   331