本文详细介绍在Windows平台下,如何利用JavaScript的ActiveXObject对象及Scripting.FileSystemObject组件,实现对本地驱动器、文件夹及文件内容的读取、写入、移动和删除操作。文章涵盖对象创建、属性访问及具体代码示例,并指出该方案仅适用于IE浏览器且需注意安全提示。
JavaScript通过ActiveXObject操作本地文件系统详解
在Windows操作系统环境中,JavaScript具备调用Windows提供的ActiveX对象的能力。本文将简要介绍如何利用JavaScript实现文档处理,并演示如何编写相关的ActiveX组件。
具体实现代码如下所示:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title> New Document </title>
</head>
<script type="text/javascript">
function readFolder(){
var filePath = "d:\\test\\";
var fso = new ActiveXObject("Scripting.FileSystemObject"); //加载控件
var f = fso.GetFolder(filePath);
var underFiles = new Enumerator(f.files); //文件夹下文件
for (;!underFiles.atEnd();underFiles.moveNext()){
var fn = "" + underFiles.item();
//alert(fn);
var content = readFile(fn,fso);
alert(content);
}
}
function readFile(path,fso){
var f1 = fso.GetFile(path);
var fh = fso.OpenTextFile(f1, 1/*reading*/);
var content = '';
while ( !fh.AtEndOfStream ) {
content += fh.ReadLine();
}
fh.close()
return content;
}
function writeExcel(){
var ExcelApp = new ActiveXObject("Excel.Application");
var ExcelSheet = new ActiveXObject("Excel.Sheet");
ExcelSheet.Application.Visible = true;
ExcelSheet.ActiveSheet.Cells(1,1).Value = "This is column A, row 1";
ExcelSheet.SaveAs("d:\\TEST.XLS");
ExcelSheet.Application.Quit();
}
</script>
<body>
<input type="button" value="遍历文件夹" onclick="readFolder()">
<input type="button" value="写excel" onclick="writeExcel()">
</body>
</html>
在JavaScript中,ActiveXObject对象用于启用并返回自动化对象的引用。其标准使用语法为:
newObj = new ActiveXObject( servername.typename[, location])
ActiveXObject对象的语法包含以下部分:其中newObj为必选项,指代被赋值为ActiveXObject的变量名。servername也是必选项,代表提供该对象的应用程序名称。typename同样是必选项,指定要创建的对象类型或类名。location为可选项,用于指定创建该对象的网络服务器名称。
需要特别注意:ActiveX是微软的技术产物,因此该功能仅在Internet Explorer浏览器中得到支持。
FileSystemObject对象创建与基础应用
在JavaScript中,可以通过ActiveXObject创建FileSystemObject对象来执行文件操作。
一、功能实现核心:FileSystemObject 对象
若要在JavaScript中实现文件操作功能,核心在于依赖FileSystemObject对象。
二、FileSystemObject编程
使用FileSystemObject对象进行编程相对简单,通常需遵循以下步骤:创建FileSystemObject对象、应用相关方法以及访问对象的属性。
(一)创建FileSystemObject对象
创建FileSystemObject对象仅需一行代码: var fso = new ActiveXObject("Scripting.FileSystemObject"); 执行上述代码后,变量fso即成为FileSystemObject对象的一个实例。
(二)应用相关方法
创建对象实例后,即可调用对象的相关方法。例如,使用CreateTextFile方法创建一个文本文件: var fso = new ActiveXObject("Scripting.FileSystemObject"); var f1 = fso.createtextfile("c:\\myjstest.txt",true"); (三)访问对象相关属性 要访问对象的属性,首先需通过get系列方法建立指向对象的句柄。GetDrive用于获取驱动器信息,GetFolder用于获取文件夹信息,GetFile用于获取文件信息。例如,执行以下代码后,f1将成为指向文件c:\test.txt的句柄: var fso = new ActiveXObject("Scripting.FileSystemObject"); var f1 = fso.GetFile("c:\\myjstest.txt"); 随后,可通过f1访问对象的属性。例如:
代码如下:
var fso = new ActiveXObject("Scripting.FileSystemObject");
var f1 = fso.GetFile("c:\\myjstest.txt");
alert("File last modified: " + f1.DateLastModified);
执行上述最后一句后,将显示c:\myjstest.txt文件的最后修改日期属性值。需要注意的是,对于通过create方法建立的对象,无需再使用get方法获取句柄,可直接使用create方法建立的句柄名称:
代码如下:
var fso = new ActiveXObject("Scripting.FileSystemObject");
var f1 = fso.createtextfile("c:\\myjstest.txt",true");
alert("File last modified: " + f1.DateLastModified);
驱动器(Drives)属性与操作例程
三、操作驱动器(Drives)
使用FileSystemObject对象编程操作驱动器和文件夹十分便捷,类似于在Windows文件浏览器中进行的交互操作,例如拷贝或移动文件夹、获取文件夹属性等。 (一)Drives对象属性 Drive对象负责收集系统中物理或逻辑驱动器的资源内容,具备以下属性: l TotalSize:以字节(byte)为单位的驱动器总大小。 l AvailableSpace或FreeSpace:以字节(byte)为单位的驱动器可用空间。 l DriveLetter:驱动器盘符。 l DriveType:驱动器类型,取值包括removable(移动介质)、fixed(固定介质)、network(网络资源)、CD-ROM或RAM盘。 l SerialNumber:驱动器的序列号。 l FileSystem:驱动器所在文件系统类型,取值为FAT、FAT32或NTFS。 l IsReady:指示驱动器是否就绪可用。 l ShareName:共享名称。 l VolumeName:卷标名称。 l Path和RootFolder:驱动器的路径或根目录名称。
(二)Drive对象操作例程
以下例程用于显示驱动器C的卷标、总容量及可用空间等信息:
代码如下:
var fso, drv, s ="";
fso = new ActiveXObject("Scripting.FileSystemObject");
drv = fso.GetDrive(fso.GetDriveName("c:\\"));
s += "Drive C:" + " – ";
s += drv.VolumeName + "\n";
s += "Total Space: " + drv.TotalSize / 1024;
s += " Kb" + "\n";
s += "Free Space: " + drv.FreeSpace / 1024;
s += " Kb" + "\n";
alert(s);
文件夹(Folders)创建、移动与删除操作
四、操作文件夹(Folders)
文件夹操作涉及创建、移动、删除及获取相关属性。 Folder对象操作例程: 以下例程演示了获取父文件夹名称、创建文件夹、删除文件夹以及判断是否为根目录等操作:
代码如下:
var fso, fldr, s = "";
// 创建FileSystemObject对象实例
fso = new ActiveXObject("Scripting.FileSystemObject");
// 获取Drive 对象
fldr = fso.GetFolder("c:\\");
// 显示父目录名称
alert("Parent folder name is: " + fldr + "\n");
// 显示所在drive名称
alert("Contained on drive " + fldr.Drive + "\n");
// 判断是否为根目录
if (fldr.IsRootFolder)
alert("This is the root folder.");
else
alert("This folder isn't a root folder.");
alert("\n\n");
// 创建新文件夹
fso.CreateFolder ("C:\\Bogus");
alert("Created folder C:\\Bogus" + "\n");
// 显示文件夹基础名称,不包含路径名
alert("Basename = " + fso.GetBaseName("c:\\bogus") + "\n");
// 删除创建的文件夹
fso.DeleteFolder ("C:\\Bogus");
alert("Deleted folder C:\\Bogus" + "\n");
文件(Files)创建、读写及移动拷贝删除
五、操作文件(Files)
文件操作比驱动器和文件夹操作更为复杂,主要分为两类:对文件的创建、拷贝、移动和删除操作,以及对文件内容的创建、添加、删除和读取操作。以下分别详细介绍。 (一)创建文件 共有3种方法可用于创建一个空文本文件,此类文件有时也称为文本流(text stream)。 第一种方法是使用CreateTextFile方法。代码如下:
代码如下:
var fso, f1;
fso = new ActiveXObject("Scripting.FileSystemObject");
f1 = fso.CreateTextFile("c:\\testfile.txt", true);
第二种方法是使用OpenTextFile方法,并添加ForWriting属性,其中ForWriting的值为2。代码如下:
代码如下:
var fso, ts;
var ForWriting= 2;
fso = new ActiveXObject("Scripting.FileSystemObject");
ts = fso.OpenTextFile("c:\\test.txt", ForWriting, true);
第三种方法是使用OpenAsTextStream方法,同样需要设置ForWriting属性。
代码如下:
var fso, f1, ts;
var ForWriting = 2;
fso = new ActiveXObject("Scripting.FileSystemObject");
fso.CreateTextFile ("c:\\test1.txt");
f1 = fso.GetFile("c:\\test1.txt");
ts = f1.OpenAsTextStream(ForWriting, true);
(二)添加数据到文件
文件创建后,通常需按照“打开文件 -> 填写数据 -> 关闭文件”的步骤来添加数据。 打开文件可使用FileSystemObject对象的OpenTextFile方法,或使用File对象的OpenAsTextStream方法。 填写数据需使用TextStream对象的Write、WriteLine或WriteBlankLines方法。在实现写入数据功能时,三者的区别在于:Write方法不在数据末尾添加新换行符,WriteLine方法会在最后添加一个新换行符,而WriteBlankLines则增加一个或多个空行。 关闭文件可使用TextStream对象的Close方法。
(三)创建文件及添加数据例程
以下代码将创建文件、添加数据及关闭文件几个步骤结合应用:
代码如下:
var fso, tf;
fso = new ActiveXObject("Scripting.FileSystemObject");
// 创建新文件
tf = fso.CreateTextFile("c:\\testfile.txt", true);
// 填写数据,并增加换行符
tf.WriteLine("Testing 1, 2, 3.") ;
// 增加3个空行
tf.WriteBlankLines(3) ;
// 填写一行,不带换行符
tf.Write ("This is a test.");
// 关闭文件
tf.Close();
(四)读取文件内容
从文本文件中读取数据需使用TextStream对象的Read、ReadLine或ReadAll方法。Read方法用于读取文件中指定数量的字符;ReadLine方法读取一整行,但不包括换行符;ReadAll方法则读取文本文件的整个内容。读取的内容存放于字符串变量中,用于显示或分析。在使用Read或ReadLine方法时,若需跳过部分内容,可使用Skip或SkipLine方法。 以下代码演示了打开文件、填写数据以及读取数据的过程:
代码如下:
var fso, f1, ts, s;
var ForReading = 1;
fso = new ActiveXObject("Scripting.FileSystemObject");
// 创建文件
f1 = fso.CreateTextFile("c:\\testfile.txt", true);
// 填写一行数据
f1.WriteLine("Hello World");
f1.WriteBlankLines(1);
// 关闭文件
f1.Close();
// 打开文件
ts = fso.OpenTextFile("c:\\testfile.txt", ForReading);
// 读取文件一行内容到字符串
s = ts.ReadLine();
// 显示字符串信息
alert("File contents = ‘" + s + "‘");
// 关闭文件
ts.Close();
(五)移动、拷贝和删除文件
针对上述三种文件操作,JavaScript分别提供了两种对应方法:File.Move或FileSystemObject.MoveFile用于移动文件;File.Copy或FileSystemObject.CopyFile用于拷贝文件;File.Delete或FileSystemObject.DeleteFile用于删除文件。 以下代码演示了在驱动器C的根目录下创建一个文本文件,填写内容后,将文件移动到\tmp目录,再在\temp目录下建立文件拷贝,最后删除这两个目录中文件的过程:
代码如下:
var fso, f1, f2, s;
fso = new ActiveXObject("Scripting.FileSystemObject");
f1 = fso.CreateTextFile("c:\\testfile.txt", true);
// 写一行
f1.Write("This is a test.");
// 关闭文件
f1.Close();
// 获取C:\根目录下的文件句柄
f2 = fso.GetFile("c:\\testfile.txt");
// 移动文件到\tmp目录下
f2.Move ("c:\\tmp\\testfile.txt");
// 拷贝文件到\temp目录下
f2.Copy ("c:\\temp\\testfile.txt");
// 获取文件句柄
f2 = fso.GetFile("c:\\tmp\\testfile.txt");
f3 = fso.GetFile("c:\\temp\\testfile.txt");
// 删除文件
f2.Delete();
f3.Delete();
六、结 语
通过对FileSystemObject各种对象、属性和方法的介绍及示例,相信您对如何在JavaScript页面中操作驱动器、文件和文件夹已有了清晰认识。然而,上述例程较为简单,要全面灵活掌握JavaScript文件操作技术,仍需大量实践练习。此外需提醒大家,由于涉及浏览器内的高级文件读写操作,在默认浏览器安全级别下,代码运行前通常会弹出安全提示,请在实际环境中注意告知访问者。