Как открыть файл в node js
Перейти к содержимому

Как открыть файл в node js

  • автор:

Как открыть файл через nodejs?

Как можно увидеть, закачивается файл your_app.exe . Каким образом после скачивания файл можно открыть?

Приложение на node-webkit 0.10.5

  • Вопрос задан более трёх лет назад
  • 5427 просмотров

Комментировать
Решения вопроса 2
Andrey Zenkov @andreyzenkov
javascript developer

fs.exists('./your_app.exe', function (exists) < //проверка есть ли файл if(exists) < fs.readFile('./your_app.exe', function read(err, data) < if (err) < throw err; >console.log(data); // содержание файла >); > >);

Как открыть файл в node js

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

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

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

Hello Node JS!

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

let fileContent = fs.readFileSync("hello.txt", "utf8");

В метод передается путь к файлу относительно файла приложения app.js, а в качестве второго параметра указывается кодировка для получения текстового содержимого файла. На выходе получаем считанный текст.

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

fs.readFile("hello.txt", "utf8", function(error,data)< >);

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

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

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

Чтение файла в Node.js

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

Запись файла

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

fs.writeFileSync("hello.txt", "Привет ми ми ми!")

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

fs.writeFile("hello.txt", "Привет МИГ-29!")

В качестве вспомогательного параметра в функцию может передаваться функция обратного вызова, которая выполняется после завершения записи:

const fs = require("fs"); fs.writeFile("hello.txt", "Hello мир!", function(error)< if(error) throw error; // если возникла ошибка console.log("Асинхронная запись файла завершена. Содержимое файла:"); let data = fs.readFileSync("hello.txt", "utf8"); console.log(data); // выводим считанные данные >);

Запись файла в Node.js

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

const fs = require("fs"); fs.appendFileSync("hello.txt", "Привет ми ми ми!"); fs.appendFile("hello.txt", "Привет МИД!", function(error)< if(error) throw error; // если возникла ошибка console.log("Запись файла завершена. Содержимое файла:"); let data = fs.readFileSync("hello.txt", "utf8"); console.log(data); // выводим считанные данные >);

Дозапись в файл в Node.js

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

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

fs.unlinkSync("hello.txt")

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

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

Чтение и запись файлов в Node.js

Операции с файлами языку JavaScript не в новинку — в JScript, встроенном в Windows, доступен полный набор функций для работы с диском. Node, в силу своей асинхронной природы, несколько усложняет эти в общем то тривиальные задачи.

Сразу хочу предупредить об одной возможной ошибке. Если Вы, как и я, запускаете Node в виртуальной машине из общей папки, помните — VM в эту папку писать не может. Попытки создать или дополнить файлы в ней закончатся только Error: Permission denied

Открытие файла

Обращение к файлам на диске — операция небыстрая. Она в среднем в десятки тысяч раз дольше чем обращение к оперативной памяти. Поэтому, большинство операций с файлами асинхронные. Все операции с файловой системой собраны во встроенном модуле fs, стало быть начнём с его подключения.

var fs = require("fs"), sys = require("sys");

Модуль sys нам нужен для вывода информации в консоль. В последующих примерах я эти строки буду опускать, чтобы не повторяться.

Открытие файла делается так:

fs.open( , , , )
  • Путь к файлу. Относительно запущенного скрипта либо абсолютный.
  • Флаг — режим доступа к файлу. Может принимать следующие значения:
    • r — только чтение, указатель в начале файла
    • r+ — чтение и запись, указатель в начале файла
    • w — только запись, указатель в начале файла
    • w+ — запись и чтение, указатель в начале файла
    • a — запись, указатель в конце файла
    • a+ — запись и чтение, указатель в конце файла
    fs.open("readme.txt", "r+", 0644, function(err, file_handle) < if (!err) < // Операции с открытым файлом >else < // Обработка ошибок >>);

    Запись в файл

    Для записи в файл используется метод fs.write :

    fs.write( , , , , )
    • Дескриптор файла, полученный в fs.open .
    • Данные, которые мы записываем. Объекты здесь будут приведены к строковому типу.
    • Позиция, с которой начинается запись. Null означает запись с текущей позиции.
    • Кодировка, в которой будут записаны данные. Может быть «ascii«, «utf8» и «raw«
    • Обработчик — функция, которая будет выполнена после записи. Аргументы — флаг ошибки и количество записанных байт

    Расширим предыдущий пример записью строки ��

    fs.open("readme.txt", "a", 0644, function(err, file_handle) < if (!err) < // Записываем в конец файла readme.txt фразу "Copyrighted by Me" // при открытии в режиме "a" указатель уже в конце файла, и мы передаём null // в качестве позиции fs.write(file_handle, 'Copyrighted by Me', null, 'ascii', function(err, written) < if (!err) < // Всё прошло хорошо >else < // Произошла ошибка при записи >>); > else < // Обработка ошибок при открытии >>);

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

    Чтение делается так:

    fs.read( , , , , )

    Здесь всё почти так же, как в fs.write .

    • Дескриптор файла, полученный в fs.open
    • Длина данных, которые мы планируем прочитать
    • Позиция, с которой начинаем читать. Null — с текущей позиции
    • Кодировка, в которой читаются данные. Может быть «ascii«, «utf8» и «raw«. Здесь лучше не ошибаться )
    • Обработчик — функция, которая будет выполнена после чтения. Аргументы — флаг ошибки ,данные, количество прочитанных байт

    Чтение из файла — совсем несложный процесс:

    fs.open("readme.txt", "r", 0644, function(err, file_handle) < if (!err) < // Читаем 10 килобайт с начала файла, в ascii fs.read(file_handle, 10000, null, 'ascii', function(err, data) < if (!err) < // Всё прошло хорошо, выводим прочитанное в консоль sys.puts(data); >else < // Произошла ошибка при чтении >>); > else < // Обработка ошибок при открытии файла >>);

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

    fs.open("readme.txt", "r", 0644, function(err, file_handle) < if (!err) < // Читаем 10 килобайт с начала файла, в ascii fs.read(file_handle, 10000, null, 'ascii', function(err, data) < if (!err) < // Всё прошло хорошо, выводим прочитанное в консоль sys.puts(data); fs.close(file_handle); >else < // Произошла ошибка при чтении >>); > else < // Обработка ошибок при открытии файла >>);

    Вторым аргументом fs.close может принимать функцию-callback, которой передаётся исключение в случае ошибки.

    У всех перечисленных функций есть синхронные варианты. К их названию добавлено Sync и они не принимают последним аргументом функцию-обработчик, а просто возвращают соответствующее значение (или бросают исключение). Обратите внимание, readSync возвращает массив из данных и количества прочитанных байт.

    var file_handle = fs.openSync("readme.txt", "r", 0644); var data = fs.readSync(file_handle, 10000, null, 'ascii'); sys.puts(data[0]); fs.closeSync(file_handle);

    NodeJS не открывает файл .js

    Ошибка

    При подгрузке файла .js выдает ошибку Содержимое файла:

    console.log("Success!"); 

    Не понятны причины :/ Делаю все по руководству
    Отслеживать
    user181100
    задан 3 мар 2016 в 15:14
    45 9 9 бронзовых знаков

    1 ответ 1

    Сортировка: Сброс на вариант по умолчанию

    Вы делаете это, уже запустив node . В этот момент вы уже находитесь в JavaScript REPL (в трейсе ошибки, видите?) и можете вводить непосредственный код на JavaScript. Введите вместо node m.js содержимое файла ( console.log(«Success!») ) и оно успешно выполнится.

    node m.js это команда для оболочки ОС на запуск node с аргументом m.js , в котором node узнает путь к файлу и выполнит его.

    • Найдите папку, содержащую m.js в Проводнике
    • Удерживая Shift , щёлкните по папке правой кнопкой мыши
    • Выберите «Открыть окно команд»: откроется окно с cmd.exe в нужной папке
    • Во всплывшем окне введите node m.js и нажмите Enter

    Запустить этот файл можно даже из запущенного в этой же папке node ! Вот так:

    require("./m.js") 

    Отслеживать
    ответ дан 3 мар 2016 в 16:34
    user181100 user181100

      Важное на Мете
    Похожие

    Подписаться на ленту

    Лента вопроса

    Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

    Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.10.27.43697

    Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

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

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