Skip to content

Latest commit

 

History

History
 
 

01-read-file

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 

Чтение файла с выводом содержимого в консоль

В файле index.js директории 01-read-file напишите скрипт выводящий в консоль содержимое файла text.txt.

Общие правила:

  • Запрещается использование любых сторонних модулей
  • Каждое из заданий должно запускаться командой node <имя папки задания> выполненной в корневой директории
  • Запрещается использование синхронных функций модуля fs такие как fs.statSync(path[, options]), fs.readFileSync(path[, options]) и другие находящиеся в разделе synchronous API

Требования

  • Внутри папки 01-read-file находятся 2 файла index.js и text.txt
  • При выполнении команды node 01-read-file в корневом каталоге репозитория в консоль выводится содержимое файла text.txt.
  • В коде не должны быть использованы синхронные методы чтения файла.
  • Чтение файла должно происходить с помощью ReadStream.

Цели задания

  • Познакомиться с основами работы с файловой системой на платформе Node.Js
  • Изучить основы streams и events
  • Ознакомиться с модулем Path и научиться применять его для построения абсолютного пути к файлам.

Описание

В данном задании от вас требуется написать небольшой скрипт, результатом работы которого будет вывод содержимого заранее подготовленного текстового файла в консоль. Для этого вы можете придерживаться данного порядка действий:

  1. Импортировать необходимые для выполнения задания модули:
  • Для взаимодействия с файловой системой в NodeJs используется модуль fs, документацию которого можно найти по этой ссылке(перевод на русский приложен в разделе "Полезные ссылки").
  • Для корректного указания пути к файлу вам понадобится модуль Path.
  1. Создать новый ReadStream из файла text.txt.
  2. Направить поток чтения в стандартный поток вывода.

Советы

Для импорта в Node.js используйте CommonJS modules. Несмотря на то, что в настоящее время Node.js уже имеет почти полную поддержку ECMAScript modules(import/export), данный подход ещё не полностью стабилен и подавляющее большинство кода с которым вы столкнётесь будет написано с помощью CommonJS.
Прим: const fs = require('fs');

Для считывания файла вы будете использовать потоки (streams), которые являются важной и полезной частью платформы. Благодаря им, вы можете налету обрабатывать огромные количества данных по чанку за раз, при этом расходуя минимальное количество ресурсов, вместо того, чтобы выгружать их в память целиком. В дальнейшем вы не раз столкнётесь с ними в своей работе. Так же, важным моментом будет ознакомление с ещё одной базовой концепцией платформы Node.js, а именно Events(события). Node.js использует события почти повсеместно, а большинство объектов являются наследниками класса EventEmitter. Для более полного понимания работы потоков при изучении рекомендую сначала ознакомиться именно с событиями, так как каждый поток является наследником EventEmitter. Материалы по данным темам так же приложены в разделе "Полезные ссылки".

При создании ReadStream обратите внимание на то, что команда запуска вашего кода должна выполняться в корневой директории репозитория, а следовательно важно правильно передать путь к файлу для чтения. Node.js, в случае передачи относительного пути к файлу вроде ./text.txt будет искать его относительно директории в которой был запущен процесс. Функция join из модуля Path позволяет создать полный путь к текстовому файлу основываясь на переменной __dirname хранящей путь к каталогу, где находится файл вашего скрипта. Таким образом директория из которой вы запускаете код не повлияет на место поиска нужного файла и вы всегда будете ссылаться на text.txt лежащий рядом с index.js. Так же модуль Path содержит другие полезные функции для манипуляций с путями, а потому настоятельно рекомендую изучить его возможности.

У вас будет несколько вариантов для того, чтобы направить ваш поток чтения в поток стандартного вывода(то есть консоль. Больше о стандартных потоках можно узнать тут), Вы можете использовать как высокоуровневый console.log(), так и работать напрямую с потоком вывода process.stdout.

Полезные ссылки

Обратите внимание, что переводы документации на русский язык могут быть устаревшими и не содержать всех современных возможностей модулей. Однако, основные концепции описанные там работают и по сей день. Для получения актуальной информации всегда используйте официальную документацию!