本文详细介绍如何在 JavaScript 中利用 FileSystemObject 对象实现本地文件系统操作。内容涵盖创建 FSO 实例、获取驱动器与文件夹信息、创建及读写文本文件、以及文件的移动、拷贝和删除。通过具体代码示例,展示如何编写、读取和关闭文件流,并提醒浏览器安全策略对本地文件访问的限制。
JavaScript 文件操作技术详解
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)操作
利用 FileSystemObject 对象编程操作驱动器和文件夹非常直观,类似于在 Windows 文件浏览器中的交互体验,例如执行拷贝、移动文件夹或获取文件夹属性等操作。
(一)Drive 对象属性
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)操作
文件夹操作主要涉及创建、移动、删除以及获取相关属性。
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)操作
文件操作比驱动器和文件夹操作更为复杂,主要分为两类:一是对文件进行创建、拷贝、移动和删除的管理操作;二是对文件内容进行创建、添加、删除和读取的数据操作。以下分别详细介绍。
(一)创建文件
共有三种方法可用于创建一个空文本文件,此类文件有时也被称为文本流(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 文件操作技术,仍需大量的实践练习。此外需特别提醒,由于涉及浏览器内的文件读写这一高级操作,在默认浏览器安全级别下,代码运行前通常会弹出安全提示,请在实际环境中注意引导访问者进行处理。