Как открыть файл через 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);
И здесь стоит обратить внимание, что несмотря на то, что функция 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); // выводим считанные данные >);
Следует отметить, что эти методы полностью перезаписывают файл. Если надо дозаписать файл, то применяются методы 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); // выводим считанные данные >);
Удаление файла
Для удаления файла в синхронном варианте используется функция 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.