我想写数据到现有的文件使用JavaScript。
我不想在主机上打印。
我想实际写入数据到abc.txt。
我读了很多回答的问题,但他们都是在主机上打印的。
在某些地方,他们给出了代码,但它不起作用。
所以请任何人可以帮助我如何实际写入数据文件。
我引用了代码,但它不工作:
给出错误:
Uncaught TypeError:非法构造函数
在chrome和
SecurityError:操作不安全。
在Mozilla
var f = "sometextfile.txt";
writeTextFile(f, "Spoon")
writeTextFile(f, "Cheese monkey")
writeTextFile(f, "Onion")
function writeTextFile(afilename, output)
{
var txtFile =new File(afilename);
txtFile.writeln(output);
txtFile.close();
}
所以我们实际上可以写数据到文件只使用Javascript或不?
您可以使用Blob和URL.createObjectURL在浏览器中创建文件。所有最近的浏览器都支持这一点。
您不能直接保存您创建的文件,因为这会导致大量的安全问题,但您可以将其作为下载链接提供给用户。在支持下载属性的浏览器中,您可以通过链接的下载属性建议文件名。与任何其他下载一样,下载文件的用户将对文件名有最终决定权。
var textFile = null,
makeTextFile = function (text) {
var data = new Blob([text], {type: 'text/plain'});
// If we are replacing a previously generated file we need to
// manually revoke the object URL to avoid memory leaks.
if (textFile !== null) {
window.URL.revokeObjectURL(textFile);
}
textFile = window.URL.createObjectURL(data);
// returns a URL you can use as a href
return textFile;
};
下面是一个使用该技术保存文本区域中的任意文本的示例。
如果您希望立即启动下载,而不是要求用户单击链接,您可以使用鼠标事件来模拟鼠标单击链接,就像Lifecube的答案所做的那样。我已经创建了一个使用该技术的更新示例。
var create = document.getElementById('create'),
textbox = document.getElementById('textbox');
create.addEventListener('click', function () {
var link = document.createElement('a');
link.setAttribute('download', 'info.txt');
link.href = makeTextFile(textbox.value);
document.body.appendChild(link);
// wait for the link to be added to the document
window.requestAnimationFrame(function () {
var event = new MouseEvent('click');
link.dispatchEvent(event);
document.body.removeChild(link);
});
}, false);
在不可能使用新的Blob解决方案的情况下,这肯定是现代浏览器中最好的解决方案,它仍然可以使用这种更简单的方法,顺便说一下,它在文件大小上有限制:
function download() {
var fileContents=JSON.stringify(jsonObject, null, 2);
var fileName= "data.json";
var pp = document.createElement('a');
pp.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(fileContents));
pp.setAttribute('download', fileName);
pp.click();
}
setTimeout(function() {download()}, 500);
$('#download').on("click", function() {
function download() {
var jsonObject = {
"name": "John",
"age": 31,
"city": "New York"
};
var fileContents = JSON.stringify(jsonObject, null, 2);
var fileName = "data.json";
var pp = document.createElement('a');
pp.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(fileContents));
pp.setAttribute('download', fileName);
pp.click();
}
setTimeout(function() {
download()
}, 500);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="download">Download me</button>