如何使用 JavaScript 读取和写入文件?

IT技术 javascript file-io
2021-01-29 15:27:50

任何人都可以提供一些示例代码来使用 JavaScript 读取和写入文件吗?

6个回答

为完整起见,OP 没有说明他希望在浏览器中执行此操作(如果他是,如所述,通常是不可能的)

然而 javascript 本身确实允许这样做;它可以用服务器端 javascript 来完成。

请参阅有关 Javascript File 类的文档

编辑:该链接指向现在已被 Oracle 移动的 Sun 文档。

为了跟上时代,这里是 FileSystem 类的 node.js 文档:http : //nodejs.org/docs/latest/api/fs.html

编辑(2):您现在可以使用 HTML5 读取文件客户端:http : //www.html5rocks.com/en/tutorials/file/dndfiles/

是否也可以使用 HTML5 写入本地文件?
2021-03-10 15:27:50
@DustinGraham,实际上现在有了 Chrome API,我们实际上可以通过 JavaScript 将文件写入客户端,对吗?
2021-04-06 15:27:50
此外,根据您的情况,您可以对 php 脚本进行 ajax 调用并以这种方式转储数据。这在我想存储一些在 javascript 端生成的数据的情况下很有用,但不管它是如何到达那里的。
2021-04-08 15:27:50

否。浏览器端 javascript 无权写入客户端计算机,而不必禁用许多安全选项

@Mike — 不是在写这个答案的时候,默认情况下假设浏览器端 JS 仍然是合理的。
2021-03-12 15:27:50
@LightnessRacesinOrbit 否决按钮并不意味着答案被认为是不正确的。它的工具提示文本是This answer is not useful.
2021-04-02 15:27:50
如果 OP 计划在浏览器之外使用 javascript,那么这种情况很少见,他们可能会提到它。假设一个浏览器并不是不合理的(绝对不是不正确的)。+1(弥补marcgg的-1)。
2021-04-03 15:27:50
@marcgg:这使得这个答案不完整,不正确。而且,让我们面对现实,这个答案很可能确实涵盖了 OP 的用例。
2021-04-07 15:27:50

未来已来!提案接近完成,不再有 ActiveX 或 flash 或 java。现在我们可以使用:

您可以使用拖放功能将文件放入浏览器,或使用简单的上传控件。一旦用户选择了一个文件,您就可以使用 Javascript 阅读它:http : //www.html5rocks.com/en/tutorials/file/dndfiles/

链接再次断开,它们都是相同的链接,但含义不同.. 断开。
2021-03-14 15:27:50
@insidesin 已修复
2021-03-21 15:27:50
现在链接失效了。
2021-04-09 15:27:50

这是 mozilla 提案

http://www-archive.mozilla.org/js/js-file-object.html

这是通过spidermonkey 和adobe 的extendscript 中的编译开关实现的。另外(我认为)您在 Firefox 扩展中获得 File 对象。

犀牛有一个(相当粗鲁的) readFile 函数 https://developer.mozilla.org/en/Rhino_Shell

对于 Rhino 中更复杂的文件操作,您可以使用 java.io.File 方法。

你不会在浏览器中得到任何这些东西。对于浏览器中的类似功能,您可以使用 HTML5、客户端持久性、cookie 和闪存存储对象中的 SQL 数据库功能。

这个 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");
此外,它是否适用于所有操作系统(只要选择了有效的文件位置?)
2021-03-31 15:27:50
ir=createElement('iframe'); -- iframe 是 iFrame ID。
2021-04-02 15:27:50
这是一个很好的解决方案,但是它是否仅适用于 IE?我尝试了 IE 和 FF,但在 FF 中它不起作用。
2021-04-02 15:27:50