App下載

在HTML5中怎么對(duì)本地文件進(jìn)行讀取和寫(xiě)入?案例詳解!

猿友 2021-07-29 14:19:23 瀏覽數(shù) (4744)
反饋

通過(guò)簡(jiǎn)單的對(duì)于html學(xué)習(xí)中我們不僅要學(xué)會(huì)簡(jiǎn)單的效果實(shí)現(xiàn),還需要進(jìn)行高難度效果的挑戰(zhàn),那么今天我們就來(lái)講講有關(guān)于:“在HTML5中怎么對(duì)本地文件進(jìn)行讀取和寫(xiě)入?”這個(gè)問(wèn)題的相關(guān)內(nèi)容分享!

最近有這樣一個(gè)需求,就是在html頁(yè)面中有個(gè)按鈕導(dǎo)出,點(diǎn)擊它,將構(gòu)造一個(gè)文檔并存儲(chǔ)到本地文件系統(tǒng)中。另外還有個(gè)按鈕,點(diǎn)擊它,從本地文件系統(tǒng)中讀取一個(gè)文件并對(duì)內(nèi)容進(jìn)行分析。

說(shuō)白了,就是一件事,就是如何讀取或?qū)懭氡镜匚募到y(tǒng)中的文件。

這件事情在html5以前是一件非??植赖?,因?yàn)闉g覽器對(duì)本地文件系統(tǒng)有非常強(qiáng)的保護(hù),似乎是一種叫做沙盒的機(jī)制,總之是,js不可以直接操作它。所以,這個(gè)時(shí)候,要想讀某個(gè)文件,就需要將文件上傳到服務(wù)器,然后服務(wù)器讀取并解析這個(gè)文件,并將解析結(jié)果返回客戶端。寫(xiě)一個(gè)文件,就稍微簡(jiǎn)單些,js沒(méi)辦法寫(xiě),所以只能是服務(wù)器動(dòng)態(tài)生成一個(gè)文件,并以下載的方式來(lái)下載它(attachment)。但是這樣其實(shí)是很不合理的。因?yàn)橐僮鬟@個(gè)文件的是js引擎,但是中間還需要通過(guò)一個(gè)服務(wù)器。

html5來(lái)了它提供了一套文件系統(tǒng)的API,可以實(shí)現(xiàn)文件讀寫(xiě),我很好奇,這個(gè)需求可能是很常見(jiàn)的,但是網(wǎng)上卻很少有Demo.所以,自己整理了一下。

文件讀取

文件讀取要利用到的API是FileReader,在html中的元素為:

<div>
    <input type="file" id="files" style="display:none" onchange="import();"/>
    <input type="button" id="import" value="導(dǎo)入"/>
</div>

 html中元素就這么簡(jiǎn)單,首先需要一個(gè)file類型的input元素,這里為啥要display:none呢?因?yàn)檫@個(gè)東西太丑了

js代碼:

$("#import").click(function(){//點(diǎn)擊導(dǎo)入按鈕,使files觸發(fā)點(diǎn)擊事件,然后完成讀取文件的操作。
        $("#files").click();
    });
 
function import(){
    var selectedFile = document.getElementById("files").files[0];//獲取讀取的File對(duì)象
    var name = selectedFile.name;//讀取選中文件的文件名
    var size = selectedFile.size;//讀取選中文件的大小
    console.log("文件名:"+name+"大?。?+size);
 
    var reader = new FileReader();//這里是核心?。?!讀取操作就是由它完成的。
    reader.readAsText(selectedFile);//讀取文件的內(nèi)容
 
    reader.onload = function(){
        console.log(this.result);//當(dāng)讀取完成之后會(huì)回調(diào)這個(gè)函數(shù),然后此時(shí)文件的內(nèi)容存儲(chǔ)到了result中。直接操作即可。
    };
}

這樣,讀取本地文件的操作就完成了。有些網(wǎng)友說(shuō)什么使用ActiveXObject的什么的,這個(gè)只有在IE中才能使用,但是現(xiàn)在連微軟都放棄了IE,所以,不要這樣使用。

寫(xiě)入文件

寫(xiě)入文件稍微復(fù)雜了一些,雖然在html5中與FileReader相對(duì)應(yīng)的也有一個(gè)FileWriter,但是這個(gè)東西用起來(lái)實(shí)在是不爽,至少我查了大半天,沒(méi)有找到一個(gè)可以用的API,此外,F(xiàn)ileReader可以被Chrome、FF和Safari都支持。當(dāng)然了,要求一定版本以上的。 但是FileWriter似乎只有被Chrome支持。不管了,能用就好。

//首先導(dǎo)入一個(gè)js文件
<script type="text/JavaScript" src="./js/FileSaver.js" charset="utf-8"></script>
//html中添加一個(gè)導(dǎo)出元素 
<input type="button" id="export" value="導(dǎo)出"/>
//js文件
$("#export).click(function(){
    var content = "這是直接使用html5進(jìn)行導(dǎo)出的";
    var blob = new Blob([content], {type: "text/plain;charset=utf-8"});
    saveAs(blob, "file.txt");//saveAs(blob,filename)
});

在文中小編通過(guò)自己遇到的問(wèn)題和解決方法分享給大家想必小伙伴們對(duì)于:“在HTML5中怎么對(duì)本地文件進(jìn)行讀取和寫(xiě)入?”這個(gè)問(wèn)題就有了更清晰的認(rèn)識(shí)了,當(dāng)然我們也可以在W3Cschool中進(jìn)行全面的學(xué)習(xí)認(rèn)識(shí)更多的東西!希望小編的分享對(duì)大家有所幫助!


0 人點(diǎn)贊