在windows平臺上, js可以調(diào)用很多windows提供地activexobject,本文就使用js來實現(xiàn)文檔處理, 和使用js編寫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對象是啟用并返回 automation 對象地引用.使用方法:
newobj = new activexobject( servername.typename[, location])
activexobject 對象語法有這些部分:其中newobj是必選項.要賦值為 activexobject 地變量名.
servername是必選項.提供該對象地應用程序地名稱.
typename是必選項.要創(chuàng)建地對象地類型或類.
location是可選項.創(chuàng)建該對象地網(wǎng)絡服務器地名稱.
切記:activex是微軟地東西,故而這玩意兒只有ie才支持!
javascript中利用activexobject來創(chuàng)建filesystemobject操作文件
一、功能實現(xiàn)核心:filesystemobject 對象
要在javascript中實現(xiàn)文件操作功能,主要就是依靠filesystemobject對象.
二、filesystemobject編程
使用filesystemobject 對象進行編程很簡單,一般要經(jīng)過如下地步驟: 創(chuàng)建filesystemobject對象、應用相關(guān)方法、訪問對象相關(guān)屬性 .
(一)創(chuàng)建filesystemobject對象
創(chuàng)建filesystemobject對象地代碼只要1行:
var fso = new activexobject(scripting.filesystemobject);
上述代碼執(zhí)行后,fso就成為一個filesystemobject對象實例.
(二)應用相關(guān)方法
創(chuàng)建對象實例后,就可以使用對象地相關(guān)方法了.比如,使用createtextfile方法創(chuàng)建一個文本文件:
var fso = new activexobject(scripting.filesystemobject);
var f1 = fso.createtextfile(c:\\myjstest.txt,true);
(三)訪問對象相關(guān)屬性
要訪問對象地相關(guān)屬性,首先要建立指向?qū)ο蟮鼐浔?,這就要通過get系列方法實現(xiàn):getdrive負責獲取驅(qū)動器信息,getfolder負責獲取文件夾信息,getfile負責獲取文件信息.比如,指向下面地代碼后,f1就成為指向文件c:\test.txt地句柄:
var fso = new activexobject(scripting.filesystemobject);
var f1 = fso.getfile(c:\\myjstest.txt);
然后,使用f1訪問對象地相關(guān)屬性.比如:
代碼如下:
var fso = new activexobject(scripting.filesystemobject);
var f1 = fso.getfile(c:\\myjstest.txt);
alert(file last modified: + f1.datelastmodified);
執(zhí)行上面最后一句后,將顯示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);
三、操作驅(qū)動器(drives)
使用filesystemobject對象來編程操作驅(qū)動器(drives)和文件夾(folders)很容易,這就象在windows文件瀏覽器中對文件進行交互操作一樣,比如:拷貝、移動文件夾,獲取文件夾地屬性.
(一)drives對象屬性
drive對象負責收集系統(tǒng)中地物理或邏輯驅(qū)動器資源內(nèi)容,它具有如下屬性:
l totalsize:以字節(jié)(byte)為單位計算地驅(qū)動器大小.
l availablespace或freespace:以字節(jié)(byte)為單位計算地驅(qū)動器可用空間.
l driveletter:驅(qū)動器字母.
l drivetype:驅(qū)動器類型,取值為:removable(移動介質(zhì))、fixed(固定介質(zhì))、network(網(wǎng)絡資源)、cd-rom或者ram盤.
l serialnumber:驅(qū)動器地系列碼.
l filesystem:所在驅(qū)動器地文件系統(tǒng)類型,取值為fat、fat32和ntfs.
l isready:驅(qū)動器是否可用.
l sharename:共享名稱.
l volumename:卷標名稱.
l path和rootfolder:驅(qū)動器地路徑或者根目錄名稱.
(二)drive對象操作例程
下面地例程顯示驅(qū)動器c地卷標、總?cè)萘亢涂捎每臻g等信息:
代碼如下:
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)
涉及到文件夾地操作包括創(chuàng)建、移動、刪除以及獲取相關(guān)屬性.
folder對象操作例程 :
下面地例程將練習獲取父文件夾名稱、創(chuàng)建文件夾、刪除文件夾、判斷是否為根目錄等操作:
代碼如下:
var fso, fldr, s = ;
// 創(chuàng)建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);
// 創(chuàng)建新文件夾
fso.createfolder (c:\\bogus);
alert(created folder c:\\bogus + \n);
// 顯示文件夾基礎(chǔ)名稱,不包含路徑名
alert(basename = + fso.getbasename(c:\\bogus) + \n);
// 刪除創(chuàng)建地文件夾
fso.deletefolder (c:\\bogus);
alert(deleted folder c:\\bogus + \n);
五、操作文件(files)
對文件進行地操作要比以上介紹地驅(qū)動器(drive)和文件夾(folder)操作復雜些,基本上分為以下兩個類別:對文件地創(chuàng)建、拷貝、移動、刪除操作和對文件內(nèi)容地創(chuàng)建、添加、刪除和讀取操作.下面分別詳細介紹.
(一)創(chuàng)建文件
一共有3種方法可用于創(chuàng)建一個空文本文件,這種文件有時候也叫做文本流(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);
(二)添加數(shù)據(jù)到文件
當文件被創(chuàng)建后,一般要按照打開文件->填寫數(shù)據(jù)->關(guān)閉文件地步驟實現(xiàn)添加數(shù)據(jù)到文件地目地.
打開文件可使用filesystemobject對象地opentextfile方法,或者使用file對象地openastextstream方法.
填寫數(shù)據(jù)要使用到textstream對象地write、writeline或者writeblanklines方法.在同是實現(xiàn)寫入數(shù)據(jù)地功能下,這3者地區(qū)別在于:write方法不在寫入數(shù)據(jù)末尾添加新?lián)Q行符,writeline方法要在最后添加一個新?lián)Q行符,而writeblanklines則增加一個或者多個空行.
關(guān)閉文件可使用textstream對象地close方法.
(三)創(chuàng)建文件及添加數(shù)據(jù)例程
下面地代碼將創(chuàng)建文件、添加數(shù)據(jù)、關(guān)閉文件幾個步驟結(jié)合起來進行應用:
代碼如下:
var fso, tf;
fso = new activexobject(scripting.filesystemobject);
// 創(chuàng)建新文件
tf = fso.createtextfile(c:\\testfile.txt, true);
// 填寫數(shù)據(jù),并增加換行符
tf.writeline(testing 1, 2, 3.) ;
// 增加3個空行
tf.writeblanklines(3) ;
// 填寫一行,不帶換行符
tf.write (this is a test.);
// 關(guān)閉文件
tf.close();
(四)讀取文件內(nèi)容
從文本文件中讀取數(shù)據(jù)要使用textstream對象地read、readline或readall 方法.read方法用于讀取文件中指定數(shù)量地字符;readline方法讀取一整行,但不包括換行符;readall方法則讀取文本文件地整個內(nèi)容.讀取地內(nèi)容存放于字符串變量中,用于顯示、分析.在使用read或readline方法讀取文件內(nèi)容時,如果要跳過一些部分,就要用到skip或skipline方法.
下面地代碼演示打開文件、填寫數(shù)據(jù),然后讀取數(shù)據(jù):
代碼如下:
var fso, f1, ts, s;
var forreading = 1;
fso = new activexobject(scripting.filesystemobject);
// 創(chuàng)建文件
f1 = fso.createtextfile(c:\\testfile.txt, true);
// 填寫一行數(shù)據(jù)
f1.writeline(hello world);
f1.writeblanklines(1);
// 關(guān)閉文件
f1.close();
// 打開文件
ts = fso.opentextfile(c:\\testfile.txt, forreading);
// 讀取文件一行內(nèi)容到字符串
s = ts.readline();
// 顯示字符串信息
alert(file contents = ‘ + s + ‘);
// 關(guān)閉文件
ts.close();
(五)移動、拷貝和刪除文件
對于以上三種文件操作,javascript各有兩種對應地方法:file.move 或 filesystemobject.movefile用于移動文件;file.copy 或 filesystemobject.copyfile用于拷貝文件;file.delete 或 filesystemobject.deletefile用于刪除文件.
下面地代碼演示在驅(qū)動器c地根目錄下創(chuàng)建一個文本文件,填寫一些內(nèi)容,然后將文件移動到\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.);
// 關(guān)閉文件
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();
六、結(jié) 語
通過以上對filesystemobject地各種對象、屬性和方法地介紹和示例,相信你已經(jīng)對如何使用javascript語言在頁面中操作驅(qū)動器、文件和文件夾有了清晰地認識.但是上述提及地例程都非常簡單,要全面、靈活地掌握javascript文件操作技術(shù),還需要大量地實踐練習.而且還有一點提醒大家,由于涉及到在瀏覽器中進行文件讀寫這樣地高級操作,對于默認地瀏覽器安全級別而言,在代碼運行前都會有一個信息提示,這點請在實際環(huán)境中提示訪問者注意.
更多信息請查看IT技術(shù)專欄