如何使用FileSystemObject在JavaScript中读取文件

时间:2012-10-17 06:06:05

标签: javascript file-io filesystemobject

我想用FileSystemObject读取文件。我的代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
<title>Read json</title>
</head>

<body>
<script type="text/javascript">

function readFile(filename){
    var fso = new ActiveXObject("Scripting.FileSystemObject");
    var ForReading = 1;
    var f1 = fso.OpenTextFile(filename, ForReading);
    var text = f1.ReadAll();
    f1.close();
    return text;
}

myJSONText = "text.txt";
var myObject = readFile(myJSONText);//eval('(' + myJSONText + ')');

document.write(myObject.name);
</script>
</body>
</html>

1 个答案:

答案 0 :(得分:5)

首先,让我重复上面的一些评论。 我从未见过使用ActiveXObject客户端作为应该完成的事情。

现在,让我说我正在努力学习如何自己做这件事。以下是关于这个问题的一些想法(以及有用的链接,见底部)。

根据MSDN scripting clinic column上的“关于文本文件的大量ADO”的总体布局是:

  1. 创建对象。
  2. 使用第一个使用的对象创建另一个对象 第一个对象的方法(例如获取文件)。
  3. 做点什么 文件。
  4. 关闭文件。
  5. 你是如何开始的?根据IE开发中心(链接here),在Javascript中使用ActiveXObject,如下所示:

    newObj = new ActiveXObject(servername.typename[, location])
    

    当您在代码中声明fso时,您已经明白了。那个“servername”的东西,不是本地访问的文件吗?你放入Scripting.FileSystemObject而不是“服务器名等”。这实际上很好,如果主机PC上的HKEY_CLASSES_ROOT注册表项支持它(参见上面的参考)。

    成功声明ActiveXObject后,如果浏览器允许它(仅限IE),并且最终用户同意弹出任何警告(“此页面上的ActiveX控件可能不安全,无法与其他部分交互页面...“等等,然后该对象允许您使用与该对象关联的任何方法。这就是Windows Scripting FileSystemObject的强大功能。

    现在可以使用任何FileSystemObject(fso)方法,顾名思义,它意味着本地计算机上的文件(和目录)交互。不只是阅读,因为你的问题集中在,但删除。 MSDN here提供了完整的方法和属性列表。使用后,使用.close()方法关闭文件。

    因此,出于显而易见的原因,这很危险。但一开始并不明显的是,这些与文件系统的交互可能会发生不可见。很有可能无论你做什么,从阅读文件到删除目录树,都不会出现任何警告或命令提示,让你知道发生了什么,因为你的代码很少。

    让我先评论一下上面的代码。将JSON与从FileSystemObject中提取的数据结合使用,提供了一种允许JavaScript交互的好方法(JSON .parse and .stringify立即浮现在脑海中)。有了这个,数据可以存储在本地,可能作为HTML5本地存储的替代(ref this SO thread,这与这个概念更加深入,以及我提出的关于这个here的另一个SO问题)。

    以下是一些进一步阅读的链接:
    IE Dev Center, JavaScript Objects, ActiveXObject
    MSDN JScript Windows Scripting(包括FileSystemObject方法等)
    MSDN Scripting Clinic(较旧的文章,许多断开的链接,但在这些内容上有很多好的信息)