Кто-нибудь может дать пример кода для чтения и записи файла с использованием JavaScript?
Кто-нибудь может дать пример кода для чтения и записи файла с использованием JavaScript?
Ответы:
Для полноты, OP не заявляет, что он собирается сделать это в браузере (если он, как было сказано, это вообще невозможно)
Однако javascript сам по себе позволяет это; это можно сделать с помощью серверного JavaScript.
Смотрите эту документацию по классу Javascript File.
редактировать : Эта ссылка была на документы Sun, которые теперь были перемещены Oracle.
Чтобы идти в ногу со временем, вот документация node.js для класса FileSystem: http://nodejs.org/docs/latest/api/fs.html
Изменить (2) : Теперь вы можете читать файлы на стороне клиента с помощью HTML5: http://www.html5rocks.com/en/tutorials/file/dndfiles/
Нет. JavaScript на стороне браузера не имеет разрешения на запись на клиентский компьютер без необходимости отключать множество параметров безопасности
This answer is not useful
.
Будущее здесь! Предложения ближе к завершению, больше нет ActiveX, ни flash, ни java. Теперь мы можем использовать:
Вы можете использовать Drag / Drop, чтобы получить файл в браузер, или простой элемент управления загрузкой. Когда пользователь выбрал файл, вы можете прочитать его с помощью Javascript: http://www.html5rocks.com/en/tutorials/file/dndfiles/
вот предложение Mozilla
http://www-archive.mozilla.org/js/js-file-object.html
это реализовано с помощью параметра компиляции в spidermonkey, а также в extenndscript Adobe. Дополнительно (я думаю) вы получаете объект File в расширениях Firefox.
Rhino имеет (довольно рудиментарную) функцию readFile https://developer.mozilla.org/en/Rhino_Shell
для более сложных файловых операций в Rhino вы можете использовать методы java.io.File.
вы не получите ничего подобного в браузере. Для аналогичной функциональности в браузере вы можете использовать функции базы данных SQL из HTML5, клиентское постоянство, файлы cookie и объекты флэш-памяти.
Эта функция Javascript представляет полное диалоговое окно «Сохранить как» пользователю, который запускает это через браузер. Пользователь нажимает ОК, и файл сохраняется.
Редактировать: следующий код работает только с браузером IE, так как Firefox и Chrome сочли этот код проблемой безопасности и заблокировали его работу.
// content is the data you'll write to file<br/>
// filename is the filename<br/>
// what I did is use iFrame as a buffer, fill it up with text
function save_content_to_file(content, filename)
{
var dlg = false;
with(document){
ir=createElement('iframe');
ir.id='ifr';
ir.location='about.blank';
ir.style.display='none';
body.appendChild(ir);
with(getElementById('ifr').contentWindow.document){
open("text/plain", "replace");
charset = "utf-8";
write(content);
close();
document.charset = "utf-8";
dlg = execCommand('SaveAs', false, filename+'.txt');
}
body.removeChild(ir);
}
return dlg;
}
Вызовите функцию:
save_content_to_file("Hello", "C:\\test");
Если вы используете JScript (Javascript от Microsoft) для выполнения локальных сценариев с использованием WSH (НЕ в браузере!), Вы можете использовать Scripting.FileSystemObject
для доступа к файловой системе.
Я думаю, что вы можете получить доступ к тому же объекту в IE, если отключите много настроек безопасности, но это будет очень, очень плохая идея.
hta
приложении, и это решает его
В настоящее время файлы могут быть записаны и прочитаны из контекста вкладки / окна браузера с помощью File , FileWriter и FileSystem. API-интерфейсов , хотя есть некоторые предостережения относительно их использования (см. Хвостовую часть этого ответа).
Но чтобы ответить на ваш вопрос:
Использование BakedGoods *
Написать файл:
bakedGoods.set({
data: [{key: "testFile", value: "Hello world!", dataFormat: "text/plain"}],
storageTypes: ["fileSystem"],
options: {fileSystem:{storageType: Window.PERSISTENT}},
complete: function(byStorageTypeStoredItemRangeDataObj, byStorageTypeErrorObj){}
});
Читать файл:
bakedGoods.get({
data: ["testFile"],
storageTypes: ["fileSystem"],
options: {fileSystem:{storageType: Window.PERSISTENT}},
complete: function(resultDataObj, byStorageTypeErrorObj){}
});
Использование сырых API File, FileWriter и FileSystem
Написать файл:
function onQuotaRequestSuccess(grantedQuota)
{
function saveFile(directoryEntry)
{
function createFileWriter(fileEntry)
{
function write(fileWriter)
{
var dataBlob = new Blob(["Hello world!"], {type: "text/plain"});
fileWriter.write(dataBlob);
}
fileEntry.createWriter(write);
}
directoryEntry.getFile(
"testFile",
{create: true, exclusive: true},
createFileWriter
);
}
requestFileSystem(Window.PERSISTENT, grantedQuota, saveFile);
}
var desiredQuota = 1024 * 1024 * 1024;
var quotaManagementObj = navigator.webkitPersistentStorage;
quotaManagementObj.requestQuota(desiredQuota, onQuotaRequestSuccess);
Читать файл:
function onQuotaRequestSuccess(grantedQuota)
{
function getfile(directoryEntry)
{
function readFile(fileEntry)
{
function read(file)
{
var fileReader = new FileReader();
fileReader.onload = function(){var fileData = fileReader.result};
fileReader.readAsText(file);
}
fileEntry.file(read);
}
directoryEntry.getFile(
"testFile",
{create: false},
readFile
);
}
requestFileSystem(Window.PERSISTENT, grantedQuota, getFile);
}
var desiredQuota = 1024 * 1024 * 1024;
var quotaManagementObj = navigator.webkitPersistentStorage;
quotaManagementObj.requestQuota(desiredQuota, onQuotaRequestSuccess);
Только то, что вы просили правильно? Может быть, а может и нет. Последние два API:
Кроме того, в спецификации FileSystem нет указаний о том, как структуры каталогов должны отображаться на диске. Например, в браузерах на базе Chromium песочница имеет виртуальную файловую систему (структура каталогов, которая не обязательно существует на диске в той же форме, что и при обращении из браузера), в которой каталоги и файлы, созданные с помощью API размещены.
Таким образом, хотя вы и можете записывать файлы в систему с помощью API, поиск файлов без API (ну, без API FileSystem) может быть нетривиальным делом.
Если вы можете справиться с этими проблемами / ограничениями, эти API-интерфейсы являются практически единственным родным способом сделать то, что вы просили.
Если вы открыты для неродных решений, Silverlight также разрешает ввод-вывод файлов из конкурса вкладок / окон через IsolatedStorage . Однако для использования этой возможности требуется управляемый код ; решение, которое требует написания такого кода, выходит за рамки этого вопроса.
Конечно, решение, которое использует дополнительный управляемый код, оставляя для написания только Javascript, вполне в рамках этого вопроса;):
//Write file to first of either FileSystem or IsolatedStorage
bakedGoods.set({
data: [{key: "testFile", value: "Hello world!", dataFormat: "text/plain"}],
storageTypes: ["fileSystem", "silverlight"],
options: {fileSystem:{storageType: Window.PERSISTENT}},
complete: function(byStorageTypeStoredItemRangeDataObj, byStorageTypeErrorObj){}
});
* BakedGoods - это библиотека Javascript, которая устанавливает единый интерфейс, который можно использовать для выполнения общих операций хранения во всех собственных и некоторых не собственных средствах хранения. Это поддерживается этим парнем прямо здесь:).
Для Firefox:
var file = Components.classes["@mozilla.org/file/local;1"].
createInstance(Components.interfaces.nsILocalFile);
file.initWithPath("/home");
См. Https://developer.mozilla.org/en-US/docs/Code_snippets/File_I_O
Для других, проверьте приложение TiddlyWiki , чтобы увидеть, как оно это делает.
В контексте браузера Javascript может ПРОЧИТАТЬ указанный пользователем файл. См . Блог Эрика Биделмана о подробностях чтения файла с помощью File API. Тем не менее, Javascript на основе браузера не может ЗАПИСАТЬ файловую систему локального компьютера без отключения некоторых параметров безопасности, поскольку это считается угрозой безопасности для любого веб-сайта, который может произвольно изменить вашу локальную файловую систему.
Сказав это, есть несколько способов обойти это в зависимости от того, что вы пытаетесь сделать:
Если это ваш собственный сайт, вы можете встроить Java-апплет в веб-страницу. Тем не менее, посетитель должен установить Java на локальном компьютере и будет предупрежден об угрозе безопасности. Посетитель должен разрешить загрузку апплета. Апплет Java похож на исполняемое программное обеспечение, которое имеет полный доступ к локальному компьютеру.
Chrome поддерживает файловую систему, которая является частью изолированной локальной файловой системы. Смотрите эту страницу для деталей. Это дает вам возможность временно сохранять вещи локально. Однако это не поддерживается другими браузерами.
Если вы не ограничены браузером, Node.js имеет полный интерфейс файловой системы. Смотрите здесь для документации по файловой системе . Обратите внимание, что Node.js может работать не только на серверах, но и на любом клиентском компьютере, включая Windows. Бегущий по тестам javascript Карма основан на Node.js. Если вы просто любите программировать в javascript на локальном компьютере, это вариант.
Для создания файла попробуйте
function makefile(){
var fso;
var thefile;
fso = new ActiveXObject("Scripting.FileSystemObject");
thefile=fso.CreateTextFile("C:\\tmp\\MyFile.txt",true);
thefile.close()
}
Создайте свой каталог на диске C, потому что Windows имеет защиту от записи из Интернета, например, создайте папку с именем «tmp» на диске C.
Вам придется обратиться к Flash, Java или Silverlight. В случае Silverlight вы будете смотреть на изолированное хранилище . Это позволит вам записывать файлы на собственной игровой площадке на диске пользователей. Это не позволит вам писать за пределами вашей игровой площадки.
Вы не можете сделать это любым кросс-браузерным способом. В IE есть методы, позволяющие «доверенным» приложениям использовать объекты ActiveX для чтения / записи файлов, но это, к сожалению, так.
Если вы хотите сохранить информацию о пользователях, вам, скорее всего, понадобятся файлы cookie.
Из теста ReactJS следующий код успешно записывает файл:
import writeJsonFile from 'write-json-file';
const ans = 42;
writeJsonFile('answer.txt', ans);
const json = {"answer": ans};
writeJsonFile('answer_json.txt', json);
Файл записывается в каталог, содержащий тесты, поэтому запись в настоящий файл JSON '* .json' создает цикл!
Вы не можете выполнять файловый ввод / вывод на стороне клиента, используя JavaScript, так как это может представлять угрозу безопасности. Вы должны либо заставить их загрузить и запустить exe-файл, либо, если файл находится на вашем сервере, использовать AJAX и серверный язык, такой как PHP, для выполнения ввода-вывода на стороне сервера.
Есть два способа чтения и записи файла с использованием JavaScript
Использование расширений JavaScript
Использование веб-страницы и объектов Active X
Вот решение для записи chrome v52 + (пользователю все еще нужно выбрать конечную точку ...)
источник: StreamSaver.js
<!-- load StreamSaver.js before streams polyfill to detect support -->
<script src="StreamSaver.js"></script>
<script src="https://wzrd.in/standalone/web-streams-polyfill@latest"></script>
const writeStream = streamSaver.createWriteStream('filename.txt')
const encoder = new TextEncoder
let data = 'a'.repeat(1024)
let uint8array = encoder.encode(data + "\n\n")
writeStream.write(uint8array) // must be uInt8array
writeStream.close()
Лучше всего подходит для записи больших данных, сгенерированных на стороне клиента.
В противном случае я предлагаю использовать FileSaver.js для сохранения Blob / Files