[英]Reading/Writing to a file in javascript
我想以特定方式读取和写入文件。
示例文件可以是:
name1:100
name2:400
name3:7865786
...etc etc
将数据读入并存储并最终写出的最佳方法是什么? 我不知道要使用哪种类型的数据结构? 我对javascript还是很陌生。
我希望能够确定是否有任何键值匹配。 例如,如果要添加到文件中,则可以看到name1已存在于文件中,而我只是编辑该值而不是添加重复项。
您可以将localStorage用作读取和写入之间的临时存储。
但是,您实际上无法使用客户端JavaScript随意读写用户的文件系统。 但是,您可以请求用户选择一个文件来读取,就像请求用户将您推送的数据另存为文件一样。
localStorage
允许您将数据存储为键值对,并且很容易检查某项是否存在。 可以选择仅使用文字对象,该对象基本上可以执行相同操作,但仅存在于内存中。 可以在会话之间和页面之间的导航之间保存localStorage
。
// set some data
localStorage.setItem("key", "value");
// get some data
var data = localStorage.getItem("key");
// check if key exists, set if not (though, you can simply override the key as well)
if (!localStorage.getItem("key")) localStorage.setItem("key", "value");
如果键不存在,则方法getItem
将始终返回null
。
但请注意, localStorage
只能存储字符串。 对于二进制数据和/或大容量数据,请查看索引数据库 。
要读取文件,您必须请求用户选择一个(或多个):
HTML:
<label>Select a file: <input type=file id=selFile></label>
的JavaScript
document.getElementById("selFile").onchange = function() {
var fileReader = new FileReader();
fileReader.onload = function() {
var txt = this.result;
// now we have the selected file as text.
};
fileReader.readAsText(this.files[0]);
};
要保存文件,您可以通过以下方式使用File对象:
var file = new File([txt], "myFilename.txt", {type: "application/octet-stream"});
var blobUrl = (URL || webkitURL).createObjectURL(file);
window.location = blobUrl;
使用八位字节流的原因是“强制”浏览器显示“另存为”对话框,而不是尝试在选项卡中显示文件,如果我们使用text / plain作为类型,则会发生这种情况。
因此,我们如何获得这些阶段之间的数据。 假设您仅使用键/值方法和文本,则可以使用JSON对象。
var file = JSON.stringify(localStorage);
然后以上面显示的文件blob的形式发送给用户。
要读取,您将必须手动解析文件格式(如果数据以特定格式存在),或者如果数据与保存的相同,则可以如上所示读取文件,然后将其从字符串转换为对象:
var data = JSON.parse(txt); // continue in the function block above
Object.assign(localStorage, data); // merge data from object with localStorage
请注意,您可能必须先从存储中删除项目。 也有可能其他数据已存储在此处,因此需要考虑这些情况,但这是一种方法的基础。
// due to security reasons, localStorage can't be used in stacksnippet, // so we'll use an object instead var test = {"myKey": "Hello there!"}; // localStorage.setItem("myKey", "Hello there!"); document.getElementById("selFile").onchange = function() { var fileReader = new FileReader(); fileReader.onload = function() { var o = JSON.parse(this.result); //Object.assign(localStorage, o); // use this with localStorage alert("done, myKey=" + o["myKey"]); // o[] -> localStorage.getItem("myKey") }; fileReader.readAsText(this.files[0]); }; document.querySelector("button").onclick = function() { var json = JSON.stringify(test); // test -> localStorage var file = new File([json], "myFilename.txt", {type: "application/octet-stream"}); var blobUrl = (URL || webkitURL).createObjectURL(file); window.location = blobUrl; }
Save first: <button>Save file</button> (<code>"myKey" = "Hello there!"</code>)<br><br> Then read the saved file back in:<br> <label>Select a file: <input type=file id=selFile></label>
您正在使用Nodejs吗? 还是浏览器JavaScript?
无论哪种情况,您都应该使用js的标准对象作为结构。 然后,您可以将其转换为JSON,如下所示:
var dataJSON = JSON.stringify(yourDataObj)
使用Nodejs,您将需要fs模块并使用writeFile或appendFile函数之一-这是示例代码:
const fs = require('fs');
fs.writeFileSync('my/file/path', dataJSON);
使用浏览器js,此stackoverflow可能会帮助您: Javascript:创建并保存文件
我知道您想写入文件,但是可以考虑使用数据库,这样您就不必重新发明轮子了。 INSERT ... ON DUPLICATE KEY UPDATE对于您要执行的操作来说似乎是合乎逻辑的选择。
出于安全原因,无法使用JavaScript写入客户端系统上的常规文本或类似文件。
但是,可以使用异步JavaScript和XML(AJAX)将XMLHttpRequest发送到服务器上的文件,该文件以服务器端语言(如PHP或ASP)编写。
然后,服务器端文件可以写入其他文件或服务器上的数据库。
如果您只需要在客户端系统上本地保存相对少量的数据,则Cookie很有用。
有关更多信息,请参见使用jQuery读取/写入文件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.