Как прочитать файл js
Перейти к содержимому

Как прочитать файл js

  • автор:

Как прочитать файл js

Для работы с файлами в Node.js предназначен модуль fs. Рассмотрим, как с ним работать.

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

Для асинхронного чтения файла применяется функция fs.readFile :

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

Функция принимает до трех параметров:

  • path : путь к файлу
  • options : необязательный параметр, который представляет дополнительные параметры считывания, в частности, кодировку
  • callback : функция обратного вызова, которая выполняется после завершения чтения.

callback(error, data)<>

Допустим, в папке проекта расположен текстовый файл hello.txt со следующим текстом:

Hello METANIT.COM! Hello World!

Для чтения файла «hello.txt» определим в папке проекта файл app.js со следующим кодом:

const fs = require("fs"); fs.readFile("hello.txt", function(error,data) < if(error) < // если возникла ошибка return console.log(error); >console.log(data.toString()); // выводим считанные данные >); console.log("Асинхронное чтение файлов");

И здесь стоит обратить внимание, что несмотря на то, что функция fs.readFile() вызывается первой, но так как она асинхронная, она не блокирует поток выполнения, поэтому ее результат выводится в самом конце.

c:\app> node app.js Асинхронное чтение файлов Hello METANIT.COM! Hello World! c:\app>

Для чтения файла в синхронном варианте применяется функция fs.readFileSync() :

fs.readFileSync(path[, options])

В метод передается путь к файлу, а в качестве второго параметра можно дополнительно указать кодировку. В качестве результат функция возвращает считанные данные. Пример применения:

const fs = require("fs"); const data = fs.readFileSync("hello.txt"); console.log(data.toString()); // выводим считанные данные console.log("Синхронное чтение файлов");

Консольный вывод программы:

c:\app> node app.js Hello METANIT.COM! Hello World! Синхронное чтение файлов c:\app>

Запись файла

Для асинхронной записи файла применяется функция fs.writeFile() , которая принимает 4 параметра:

fs.writeFile(file, data[, options], callback)
  • file : путь к файлу
  • data : записываемые данные
  • options : дополнительный конфигурационный объект, который определяет следующие свойства:
    • encoding : кодировка, которая используется при записи. Значение по умолчанию — «utf8»
    • mode : Режим записи в виде числа. Значение по умолчанию — 0o666
    • flag : один из системных флагов открытия файла. Значение по умолчанию — «w» (открытие на запись).
    • flush : булевое свойство, которое указывает, надо ли данные сразу записывать файл. Значение по умолчанию — false.
    • signal : объект AbortSignal, который позволяет прекратить запись
    • callback : функция, которая вызывается после записи файла. Если запись закончилась ошибкой, то первый параметр функции содержит информацию об ошибке

    Пример записи файла:

    const fs = require("fs"); const data = "Hello Node.js\n"; fs.writeFile("hello2.txt", data, function(error) < if(error)< // если ошибка return console.log(error); >console.log("Файл успешно записан"); >);

    Для записи файла в синхронном варианте используется функция fs.writeFileSync() , которая в качестве параметра принимает путь к файлу и записываемые данные:

    fs.writeFileSync("hello2.txt", "Hello Work. \n")

    Следует отметить, что эти методы по умолчанию полностью перезаписывают файл. Если надо дозаписать файл, то применяются методы fs.appendFile()/fs.appendFileSync() ^ которые принимают те же параметры:

    const fs = require("fs"); // синхронное добавление fs.appendFileSync("hello2.txt", "Hello word\n"); // асинхронное добавление fs.appendFile("hello2.txt", "Hello walk\n", function(error)< if(error) return console.log(error); // если возникла ошибка console.log("Запись файла завершена"); >);

    В качестве альтернативы можно установить через объект конфигурации флаг на дозапись — флаг «a»:

    fs.writeFile("hello2.txt", "Hello all\n", , function(error)< if(error) return console.log(error); // если возникла ошибка console.log("Запись файла завершена"); >);

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

    Для получения информации о файле в асинхронном режиме применяется функция stat() :

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

    Первый параметр представляет путь к файлу. Второй, необязательный параметр представляет объект, у которого свойство bigint хранит логическое значение и указывает, надо ли возвратить данные в виде числа (при значении true). Третий параметр — функция обратного вызова, которая принимает два параметра:

    callback(error, stat)<>

    Первый параметр хранит информацию об ошибке (при ее наличии), а второй — статистику файла. Например, получим статистику файла:

    const fs = require("fs"); // асинхронное добавление fs.stat("hello.txt", (error, stats) => < if (error) return console.error(error); console.log(stats.isFile()); // true console.log(stats.isDirectory()); // false console.log(stats); >);

    Полученная статистика представляет сложный объект с кучей свойств, которые можно увидеть по выводу. Например, я получу следующий вывод:

    c:\app> node app.js true false Stats < dev: 16777220, mode: 33188, nlink: 1, uid: 501, gid: 20, rdev: 0, blksize: 4096, ino: 8648323536, size: 31, blocks: 8, atimeMs: 1700671481153.5369, mtimeMs: 1700667050455.9146, ctimeMs: 1700667050455.9146, birthtimeMs: 1643908248703.2, atime: 2023-11-22T16:44:41.154Z, mtime: 2023-11-22T15:30:50.456Z, ctime: 2023-11-22T15:30:50.456Z, birthtime: 2022-02-03T17:10:48.703Z >c:\app>

    Для синхронного получения статистики применяется метод statSync() , который получает путь к файлу и возвращает объект статистики:

    const fs = require("fs"); const stats = fs.statSync("hello2.txt") console.log(stats.isFile()); // true console.log(stats.isDirectory()); // false console.log(stats);

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

    Для удаления файла в синхронном варианте используется функция fs.unlinkSync() , которая в качестве параметра принимает путь к удаляемому файлу:

    fs.unlinkSync("hello.txt")

    Также для удаления файла можно использовать асинхронную функцию fs.unlink() , которая принимает путь к файлу и функцию, вызываемую при завершении удаления:

    fs.unlink("hello.txt", (error) => < if (error) return console.log(error); // если возникла ошибка console.log("File deleted"); >);

    Работа с каталогами

    Также для работы с каталогами Node.js предоставляет ряд функций.

    Для создания каталога применяется функции mkdir() (асинхронная) и mkdirSync() (синхронная). В качестве параметра они принимают название каталога. Асинхронный вариант в качестве второго параметра принимает функцию обратного вызова, которая срабатывает при создании каталога:

    const fs = require("fs"); fs.mkdir("test", (error) => < if (error) return console.log(error); console.log("Folder created"); >);

    Для считывания файлов из каталога применются функции readdir() (асинхронная) и readdirSync() (синхронная). В качестве параметра они принимают название каталога. Асинхронный вариант в качестве второго параметра принимает функцию обратного вызова, у которой второй параметр представляет список файлов и папок каталога:

    const fs = require("fs"); fs.readdir("test", (error, files) => < if (error) return console.log(error); files.forEach((file) =>console.log(file)); >);

    Для удаления каталога применяются функции rmdir() (асинхронная) и rmdirSync() . В качестве параметра они принимают название каталога. Асинхронный вариант в качестве второго параметра принимает функцию обратного вызова, которая срабатывает при удалении каталога:

    const fs = require("fs"); fs.rmdir("test", (error) => < if (error) return console.log(error); console.log("Folder deleted"); >);

    Файл с расширением .js

    Иконка формата файла js

    Файл JS содержит код исполняемого сценария, написанного на языке JavaScript. JavaScript — это широко распространенный язык программирования, используемый при создании интерактивных и динамических веб-страниц, виджетов, плагинов, веб-приложений, прикладных программ, а также для автоматизации различных действий в веб-браузерах или офисных приложениях. Код на JavaScript представляет собой простой текст, поэтому файлы JS могут быть открыты в текстовом редакторе, например, Notepad++.

    Как, чем открыть файл .js?

    Инструкция — как выбрать программу из списка, скачать и использовать ее для открытия файла

    Иконка формата файла js

    2. Исполняемый скрипт JScript
    JScript Executable Script
    Разработчик: Неизвестно

    Подробное описание

    Файл содержит код исполняемого сценария на языке JScript. JScript — это язык программирования, разработанный компании Microsoft, синтаксис которого схож с языком JavaScript, но имеющий более широкое применение. Сценарии JScript могут быть запущены из командной строки и используются для автоматизации различных действий в операционных системах Microsoft Windows. Содержимое файла JS представлено в текстовом формате, поэтому его можно просмотреть в текстовом редакторе, например, Notepad++ или PSPad.

    Как, чем открыть файл .js?

    Сервер сценариев Windows (Wscript.exe)

    Инструкция — как выбрать программу из списка, скачать и использовать ее для открытия файла

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

    Программы

    • Проигрыватели аудио/видео
    • Редакторы изображений
    • Текстовые редакторы
    • Web-браузеры
    • Архиваторы
    • Работа с дисками
    • Офисные программы/пакеты

    Файлы

    • Аудио-файлы
    • Видео-файлы
    • Рисунки, изображения
    • Растровые изображения
    • Векторные изображения
    • 3D-модели, изображения
    • CAD-файлы
    • Текст, документы
    • Электронные таблицы
    • Электронные книги
    • Архивы, сжатые файлы
    • Исполняемые файлы
    • Интернет, web файлы
    • Файлы игр
    • Образы дисков
    • Системные файлы
    • Файлы шрифтов
    • Зашифрованные файлы
    • Размеченные документы
    • Файлы резервных копий
    • Файлы данных
    • Файлы баз данных
    • Скрипты, исходный код
    • Подключаемые модули
    • Файлы настроек
    • Географические файлы
    • Другие файлы

    Чтение и запись файлов в NodeJS

    В NodeJS есть функции для работы с файлами. Они позволяют читать и записывать информацию в файле на сервере.

    Чтение файла

    Для чтения файла NodeJS необходимо использовать модуль под названием «fs». Приведём пример кода для считывания файла под названием «file.txt» и вывода его содержимого в консоль:

    let fs = require('fs'); let fileContent = fs.readFileSync('file.txt', 'utf8'); console.log(fileContent);

    Первым аргументом метода «readFileSync» передаётся абсолютный или относительный адрес файла, который необходимо считать. Второй параметр — это кодировка файла для считывания.

    Наличие «Sync» в названии метода «readFileSync» означает, что используется синхронный метод чтения файла. То есть файл блокируется на время операции для всех пользователей. Мы использовали именно этот метод сейчас, потому что его легче реализовать (меньше кода)

    В отличии от PHP, в котором запросы от пользователей обрабатываются параллельно, в NodeJS выполняется только одна копия кода. К примеру, если установить бесконечный цикл вывода данных (например, в групповом чате), то первый пользователь, который запустит скрипт увидит цикл с самого начала, а остальные только с времени своего входа (запроса к скрипту).

    Из-за наличия синхронности «Sync» код из примера выше будет выполняться для всех пользователей одновременно. Попробуем переписать его, чтобы сделать параллельное выполнение. Получится так:

    let fs = require('fs'); fs.readFile('file.txt', 'utf8', function(error, fileContent)< if(error) throw error; // ошибка чтения файла, если есть console.log(fileContent); // содержимое файла >); // если файл большой, то действия ниже успеют выполнится до того // как будет выведено содержание файла через console.log(fileContent) console.log('Тише, мыши, кот на крыше');

    В этом примере чтение файла выполняется асинхронно! То есть если файл достаточно большой, то при выполнения кода примера сначала мы увидим в консоли строку «Тише, мыши, кот на крыше», а только потом содержимое файла.

    Обратите внимание на третий параметр функции «fs.readFile». В NodeJS часто используются callback функции, у которых в первом параметре указывается название переменно, куда попадает ошибка выполнения.

    Запись файла

    Для асинхронной записи данных в файл существует метод «writeFile» модуля «fs». При этом файл будет принудительно создан при отсутствии, либо вся информация будет удалена из него, если она есть. Первым параметром этой функции передаётся название файла, вторым данные для записи. При этом в третьем параметре необходимо передать callback функцию с единственным параметром — переменной, в которую запишется ошибка. Продемонстрируем простейший пример записи в файл:

    let fs = require('fs'); fs.writeFile('file.txt', 'Тише, мыши, кот на крыше', function(error)< if(error) throw error; // ошибка чтения файла, если есть console.log('Данные успешно записаны записать файл'); >);

    Обратите внимание, что во второй строчке этого примера callback функцию можно записать, опусти слово «function» и даже скобки вокруг (error). Но тогда надо поставить знак => (получится «стрелочная» функция). Чтобы получилось так:

    fs.writeFile('file.txt', 'Тише, мыши, кот на крыше', (error) => 

    Если параметр только один, то круглые скобки и вовсе можно убрать (и нельзя если параметров несколько):

    fs.writeFile('file.txt', 'Тише, мыши, кот на крыше', error => 

    Но обычно круглые скобки оставляют, чтобы было нагляднее, что это функция.

    Если в первом параметре "writeFile" указать несуществующий путь (папку, которой нет), то будет возвращена ошибка. Потому что "writeFile" умеет создавать только файлы, но не папки.

    Чтение и запись файла

    Попробуем объединить два предыдущих примера: считать данные из файла, произвести с ними действие и записать обратно в тот же файл. Для тривиального решения этой задачи стоит использовать синхронный метод чтения и записи, чтобы код не обрабатывался дальше, пока не будут выполнены действия. В таком случае достаточно будет всего лишь объединить оба примера сиз предыдущих параграфов этой статьи. Поэтому усложним задачу и используем синхронные методы чтения и записи. А чтобы не нарушить последовательности выполнения, поместим запись в callback функцию чтения. Получится так:

    let fs = require('fs'); fs.readFile('file.txt', 'utf8', function(error, fileContent)< if(error) throw error; // ошибка чтения файла, если есть console.log(fileContent); // содержимое файла let toWrite = fileContent + 'Тише, мыши, кот на крыше'; fs.writeFile('file.txt', toWrite, function(error)< if(error) throw error; // ошибка чтения файла, если есть console.log('Данные успешно записаны записать файл'); >); >);

    В результате выполнения этого кода в конец файла "file.txt" будет записана строка "Тише, мыши, кот на крыше". Если требуется сделать перенос строки, то используйте символ конца строки "\n". То есть достаточно будет написать так:

    let toWrite = fileContent + "\n" + 'Тише, мыши, кот на крыше';

    Обязательно ставьте двойные скобки "\n" вокруг символа переноса строки. Если записать одинарные кавычки, то конструкция будет воспринята как два отдельных символа, а не символ переноса строки.

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

    Здравствуйте!
    Сразу прошу тапками не кидаться - честно гуглил, но адекватного ответа не нашел. Мне нужно считать указанный пользователем файл (с локальной машины конечно же) именно в JavaScript. Задача такая, а не моя фантазия. Вроде бы это можно сделать средствами HTML5 (File API), и кстати нормально так делается.
    Но вездесущий IE как всегда все портит, а потому нужна альтернатива как минимум для него, ибо он File API до сих пор не поддерживает.
    Конечно же, в идеале, нужна кроссбраузерная альтернатива, если такая имеется. Собственно в этом и весь вопрос к вам, знатоки. в альтернативе.

    Отслеживать

    задан 27 мар 2013 в 16:53

    504 1 1 золотой знак 4 4 серебряных знака 19 19 бронзовых знаков

    без fileapi - только флэш/java. но я бы просто сделал - те кто fileapi поддерживают используют его, а те кто нет. по-старинке POST

    27 мар 2013 в 17:15

    Может, костыль: слать файл на свой сервер, и оттуда уже отдавать юзеру?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *