近日在工作中遇到了一个情况:一张纯html的网页,用它一条一条输入数据,然后由JS运算出结果(这些数据多半都是临时的,所以也没考虑保存到数据库),每次用完后换台电脑或出去搞活动现场演示时,又得重新输入一些数据,比较麻烦!市场部的同事要求最好能将在公司测试时一些临时数据导出来,到现场时,直接导入就可以了。当时我的第一反应是利用客户端js,把数据post到服务端保存,再由js通过ajax方式加载服务端的数据--即用服务端中转实现数据的导出和加载。后来想了想,就是一些偶尔用用的小玩意儿,还要用到服务端编程未免太麻烦了,于是研究了下JS直接读写文件,发现其实也可以实现:
Code
<script type="text/javascript">
/*
FileExists(filepath)是验证文件是否存在的方法,filepath是文件路径
OpenTextFile,第二个参数有三种方式,都是常量:
ForReading=1 以只读方式打开文件。 不能写这个文件。
ForWriting=2 以写方式打开文件
ForAppending= 8 打开文件并从文件末尾开始写。
*/
var oFso,oFile,sFile,sContent;
sFile = "c:\\luckty.txt";
//写文件
oFso = new ActiveXObject("Scripting.FileSystemObject");
oFile = oFso.OpenTextFile(sFile,2,true); //写方式打开
oFile.WriteLine("菩提本无树,明镜亦非台,本来无一物,何处惹尘埃!");
oFile.Close();
//读文件
oFile = oFso.OpenTextFile(sFile,1); //只读方式打开
sContent = oFile.ReadLine();
oFile.Close();
document.write(sFile + "文件内容为:<br/><br/>" + sContent);
</script>
</head>
<script type="text/javascript">
/*
FileExists(filepath)是验证文件是否存在的方法,filepath是文件路径
OpenTextFile,第二个参数有三种方式,都是常量:
ForReading=1 以只读方式打开文件。 不能写这个文件。
ForWriting=2 以写方式打开文件
ForAppending= 8 打开文件并从文件末尾开始写。
*/
var oFso,oFile,sFile,sContent;
sFile = "c:\\luckty.txt";
//写文件
oFso = new ActiveXObject("Scripting.FileSystemObject");
oFile = oFso.OpenTextFile(sFile,2,true); //写方式打开
oFile.WriteLine("菩提本无树,明镜亦非台,本来无一物,何处惹尘埃!");
oFile.Close();
//读文件
oFile = oFso.OpenTextFile(sFile,1); //只读方式打开
sContent = oFile.ReadLine();
oFile.Close();
document.write(sFile + "文件内容为:<br/><br/>" + sContent);
</script>
</head>
FileSystemObject这东东,相信只要以前弄过asp的哥们,对它再熟悉不过了(想当初做asp编程的年代,几乎就指望着FileSystemObject/Adodb.Recordset/Adodb.Connection这三个对象过日子^_^)
值得说明的是,利用ActiveX来操作,浏览器会给一个大大的安全警告,呵呵,所以本文中的方法不适合给客户使用,自己人用用还可以。