Чи може хтось дати якийсь зразок коду для читання та запису файлу за допомогою JavaScript?
Чи може хтось дати якийсь зразок коду для читання та запису файлу за допомогою JavaScript?
Відповіді:
Для повноти ОП не заявляє, що він хоче це зробити в браузері (якщо він, як було зазначено, це взагалі неможливо)
Однак 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. Тепер ми можемо використовувати:
Ви можете скористатися функцією перетягування / опускання, щоб отримати файл у веб-переглядачі, або простий елемент завантаження. Після того як користувач обрав файл, ви можете прочитати його w / Javascript: http://www.html5rocks.com/en/tutorials/file/dndfiles/
ось пропозиція мозіла
http://www-archive.mozilla.org/js/js-file-object.html
це реалізовано за допомогою перемикача компіляції у spidermonkey, а також у розширеному сценарії adobe. Крім того (я думаю) ви отримуєте об'єкт File у розширеннях firefox.
Носоріг має (досить рудиментарну) функцію readFile https://developer.mozilla.org/en/Rhino_Shell
для більш складних операцій з файлами в носорозі можна скористатися методами java.io.File.
ви не отримаєте жодного з цих матеріалів у браузері. Для подібної функціональності в браузері можна використовувати функції бази даних SQL з HTML5, постійність клієнтів, файли cookie та об'єкти зберігання флеш-пам’яті.
Ця функція Javascript представляє повне діалогове вікно «Зберегти як» користувачеві, який запускає це через браузер. Користувач натискає кнопку OK і файл зберігається.
Редагувати: Наступний код працює лише з браузером 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 (Microsoft Javascript) для локального сценарію за допомогою WSH (НЕ в браузері!), Ви можете використовувати Scripting.FileSystemObject
для доступу до файлової системи.
Я думаю, ви можете отримати доступ до цього самого об’єкта в IE, якщо вимкнути багато параметрів безпеки, але це було б дуже, дуже поганою ідеєю.
hta
додатку, і це вирішує
В даний час файли можна записувати та читати з контексту вкладки / вікна браузера за допомогою API- файлів File , FileWriter та FileSystem , хоча існують застереження щодо їх використання (див. Хвіст цієї відповіді).
Але щоб відповісти на ваше запитання:
Використання 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, 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 на локальній машині та отримає попередження про ризик безпеки. Відвідувач повинен дозволити завантажувати аплет. Яблучний аплет - це як виконуване програмне забезпечення, яке має повний доступ до локального комп'ютера.
Chrome підтримує файлову систему, яка є частиною пісочного файлу локальної файлової системи. Детальну інформацію див. На цій сторінці . Це дає змогу тимчасово зберігати речі на місцях. Однак це не підтримується іншими браузерами.
Якщо ви не обмежені браузером, Node.js має повний інтерфейс файлової системи. Дивіться тут його документацію на файлову систему . Зауважте, що Node.js може працювати не тільки на серверах, але і на будь-якому клієнтському комп'ютері, включаючи Windows. Тест-біг Javascript Karma заснований на 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 ви будете дивитись на Isolated Storage . Це дозволить вам записати файли на власному майданчику на диску користувачів. Це не дозволить вам писати поза межами своєї ігрової площадки.
Ви не можете це зробити жодним крос-браузерним способом. У 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