<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

        明月松間照 清泉石上流


                                            ——— 兵臨城下   貓科動(dòng)物
    posts - 70, comments - 137, trackbacks - 0, articles - 23
      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    Javascript-文件操作

    Posted on 2006-12-04 09:01 兵臨城下 閱讀(984) 評(píng)論(0)  編輯  收藏 所屬分類: JS
    Javascript----文件操作
    一、功能實(shí)現(xiàn)核心:FileSystemObject 對(duì)象
    ????要在javascript中實(shí)現(xiàn)文件操作功能,主要就是依靠FileSystemobject對(duì)象。
    二、FileSystemObject編程
    使用FileSystemObject 對(duì)象進(jìn)行編程很簡(jiǎn)單,一般要經(jīng)過(guò)如下的步驟: 創(chuàng)建FileSystemObject對(duì)象、應(yīng)用相關(guān)方法、訪問(wèn)對(duì)象相關(guān)屬性 。
    (一)創(chuàng)建FileSystemObject對(duì)象
    創(chuàng)建FileSystemObject對(duì)象的代碼只要1行:
    var fso = new ActiveXObject("Scripting.FileSystemObject");
    上述代碼執(zhí)行后,fso就成為一個(gè)FileSystemObject對(duì)象實(shí)例。
    (二)應(yīng)用相關(guān)方法
    創(chuàng)建對(duì)象實(shí)例后,就可以使用對(duì)象的相關(guān)方法了。比如,使用CreateTextFile方法創(chuàng)建一個(gè)文本文件:
    var fso = new ActiveXObject("Scripting.FileSystemObject");
    var f1 = fso.createtextfile("c:\\\\myjstest.txt",true");
    (三)訪問(wèn)對(duì)象相關(guān)屬性
    要訪問(wèn)對(duì)象的相關(guān)屬性,首先要建立指向?qū)ο蟮木浔?,這就要通過(guò)get系列方法實(shí)現(xiàn):GetDrive負(fù)責(zé)獲取驅(qū)動(dòng)器信息,GetFolder負(fù)責(zé)獲取文件夾信息,GetFile負(fù)責(zé)獲取文件信息。比如,指向下面的代碼后,f1就成為指向文件c:\\test.txt的句柄:
    var fso = new ActiveXObject("Scripting.FileSystemObject");
    var f1 = fso.GetFile("c:\\\\myjstest.txt");
    然后,使用f1訪問(wèn)對(duì)象的相關(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的最后修改日期屬性值。
    但有一點(diǎn)請(qǐng)注意:對(duì)于使用create方法建立的對(duì)象,就不必再使用get方法獲取對(duì)象句柄了,這時(shí)直接使用create方法建立的句柄名稱就可以:
    var fso = new ActiveXObject("Scripting.FileSystemObject");
    var f1 = fso.createtextfile("c:\\\\myjstest.txt",true");
    alert("File last modified: " + f1.DateLastModified);
    三、操作驅(qū)動(dòng)器(Drives)
    使用FileSystemObject對(duì)象來(lái)編程操作驅(qū)動(dòng)器(Drives)和文件夾(Folders)很容易,這就象在Windows文件瀏覽器中對(duì)文件進(jìn)行交互操作一樣,比如:拷貝、移動(dòng)文件夾,獲取文件夾的屬性。
    (一)Drives對(duì)象屬性
    Drive對(duì)象負(fù)責(zé)收集系統(tǒng)中的物理或邏輯驅(qū)動(dòng)器資源內(nèi)容,它具有如下屬性:
    l TotalSize:以字節(jié)(byte)為單位計(jì)算的驅(qū)動(dòng)器大小。
    l AvailableSpace或FreeSpace:以字節(jié)(byte)為單位計(jì)算的驅(qū)動(dòng)器可用空間。
    l DriveLetter:驅(qū)動(dòng)器字母。
    l DriveType:驅(qū)動(dòng)器類型,取值為:removable(移動(dòng)介質(zhì))、fixed(固定介質(zhì))、network(網(wǎng)絡(luò)資源)、CD-ROM或者RAM盤(pán)。
    l SerialNumber:驅(qū)動(dòng)器的系列碼。
    l FileSystem:所在驅(qū)動(dòng)器的文件系統(tǒng)類型,取值為FAT、FAT32和NTFS。
    l IsReady:驅(qū)動(dòng)器是否可用。
    l ShareName:共享名稱。
    l VolumeName:卷標(biāo)名稱。
    l Path和RootFolder:驅(qū)動(dòng)器的路徑或者根目錄名稱。
    (二)Drive對(duì)象操作例程
    下面的例程顯示驅(qū)動(dòng)器C的卷標(biāo)、總?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)建、移動(dòng)、刪除以及獲取相關(guān)屬性。
    Folder對(duì)象操作例程 :
    下面的例程將練習(xí)獲取父文件夾名稱、創(chuàng)建文件夾、刪除文件夾、判斷是否為根目錄等操作:
    var fso, fldr, s = "";
    // 創(chuàng)建FileSystemObject對(duì)象實(shí)例
    fso = new ActiveXObject("Scripting.FileSystemObject");
    // 獲取Drive 對(duì)象
    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)
    對(duì)文件進(jìn)行的操作要比以上介紹的驅(qū)動(dòng)器(Drive)和文件夾(Folder)操作復(fù)雜些,基本上分為以下兩個(gè)類別:對(duì)文件的創(chuàng)建、拷貝、移動(dòng)、刪除操作和對(duì)文件內(nèi)容的創(chuàng)建、添加、刪除和讀取操作。下面分別詳細(xì)介紹。
    (一)創(chuàng)建文件
    一共有3種方法可用于創(chuàng)建一個(gè)空文本文件,這種文件有時(shí)候也叫做文本流(text stream)。
    第一種是使用CreateTextFile方法。代碼如下:
    var fso, f1;
    fso = new ActiveXObject("Scripting.FileSystemObject");
    f1 = fso.CreateTextFile("c:\\\\testfile.txt", true);
    第二種是使用OpenTextFile方法,并添加上ForWriting屬性,F(xiàn)orWriting的值為2。代碼如下:
    var fso, ts;
    var ForWriting= 2;
    fso = new ActiveXObject("Scripting.FileSystemObject");
    ts = fso.OpenTextFile("c:\\\\test.txt", ForWriting, true);
    第三種是使用OpenAsTextStream方法,同樣要設(shè)置好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ù)到文件
    當(dāng)文件被創(chuàng)建后,一般要按照“打開(kāi)文件->填寫(xiě)數(shù)據(jù)->關(guān)閉文件”的步驟實(shí)現(xiàn)添加數(shù)據(jù)到文件的目的。
    打開(kāi)文件可使用FileSystemObject對(duì)象的OpenTextFile方法,或者使用File對(duì)象的OpenAsTextStream方法。
    填寫(xiě)數(shù)據(jù)要使用到TextStream對(duì)象的Write、WriteLine或者WriteBlankLines方法。在同是實(shí)現(xiàn)寫(xiě)入數(shù)據(jù)的功能下,這3者的區(qū)別在于:Write方法不在寫(xiě)入數(shù)據(jù)末尾添加新?lián)Q行符,WriteLine方法要在最后添加一個(gè)新?lián)Q行符,而WriteBlankLines則增加一個(gè)或者多個(gè)空行。
    關(guān)閉文件可使用TextStream對(duì)象的Close方法。
    (三)創(chuàng)建文件及添加數(shù)據(jù)例程
    下面的代碼將創(chuàng)建文件、添加數(shù)據(jù)、關(guān)閉文件幾個(gè)步驟結(jié)合起來(lái)進(jìn)行應(yīng)用:
    var fso, tf;
    fso = new ActiveXObject("Scripting.FileSystemObject");
    // 創(chuàng)建新文件
    tf = fso.CreateTextFile("c:\\\\testfile.txt", true);
    // 填寫(xiě)數(shù)據(jù),并增加換行符
    tf.WriteLine("Testing 1, 2, 3.") ;
    // 增加3個(gè)空行
    tf.WriteBlankLines(3) ;
    // 填寫(xiě)一行,不帶換行符
    tf.Write ("This is a test.");
    // 關(guān)閉文件
    tf.Close();
    (四)讀取文件內(nèi)容
    從文本文件中讀取數(shù)據(jù)要使用TextStream對(duì)象的Read、ReadLine或ReadAll 方法。Read方法用于讀取文件中指定數(shù)量的字符;ReadLine方法讀取一整行,但不包括換行符;ReadAll方法則讀取文本文件的整個(gè)內(nèi)容。讀取的內(nèi)容存放于字符串變量中,用于顯示、分析。在使用Read或ReadLine方法讀取文件內(nèi)容時(shí),如果要跳過(guò)一些部分,就要用到Skip或SkipLine方法。
    下面的代碼演示打開(kāi)文件、填寫(xiě)數(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);
    // 填寫(xiě)一行數(shù)據(jù)
    f1.WriteLine("Hello World");
    f1.WriteBlankLines(1);
    // 關(guān)閉文件
    f1.Close();
    // 打開(kāi)文件
    ts = fso.OpenTextFile("c:\\\\testfile.txt", ForReading);
    // 讀取文件一行內(nèi)容到字符串
    s = ts.ReadLine();
    // 顯示字符串信息
    alert("File contents = \'" + s + "\'");
    // 關(guān)閉文件
    ts.Close();
    (五)移動(dòng)、拷貝和刪除文件
    對(duì)于以上三種文件操作,javascript各有兩種對(duì)應(yīng)的方法:File.Move 或 FileSystemObject.MoveFile用于移動(dòng)文件;File.Copy 或 FileSystemObject.CopyFile用于拷貝文件;File.Delete 或 FileSystemObject.DeleteFile用于刪除文件。
    下面的代碼演示在驅(qū)動(dòng)器C的根目錄下創(chuàng)建一個(gè)文本文件,填寫(xiě)一些內(nèi)容,然后將文件移動(dòng)到\\tmp目錄下,再在目錄\\temp下面建立一個(gè)文件拷貝,最后刪除這兩個(gè)目錄的文件:
    var fso, f1, f2, s;
    fso = new ActiveXObject("Scripting.FileSystemObject");
    f1 = fso.CreateTextFile("c:\\\\testfile.txt", true);
    // 寫(xiě)一行
    f1.Write("This is a test.");
    // 關(guān)閉文件
    f1.Close();
    // 獲取C:\\根目錄下的文件句柄
    f2 = fso.GetFile("c:\\\\testfile.txt");
    // 移動(dòng)文件到\\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é) 語(yǔ)
    通過(guò)以上對(duì)FileSystemObject的各種對(duì)象、屬性和方法的介紹和示例,相信你已經(jīng)對(duì)如何使用javascript語(yǔ)言在頁(yè)面中操作驅(qū)動(dòng)器、文件和文件夾有了清晰的認(rèn)識(shí)。但是上述提及的例程都非常簡(jiǎn)單,要全面、靈活地掌握javascript文件操作技術(shù),還需要大量的實(shí)踐練習(xí)。而且還有一點(diǎn)提醒大家,由于涉及到在瀏覽器中進(jìn)行文件讀寫(xiě)這樣的高級(jí)操作,對(duì)于默認(rèn)的瀏覽器安全級(jí)別而言,在代碼運(yùn)行前都會(huì)有一個(gè)信息提示,這點(diǎn)請(qǐng)?jiān)趯?shí)際環(huán)境中提示訪問(wèn)者注意。
    <
    posted on 2006-12-01 10:29 智者無(wú)疆 閱讀(30) 評(píng)論(4) ?編輯?收藏引用收藏至365Key 所屬分類: about ajax
    評(píng)論:
    • #?re: Javascript-文件操作??智者無(wú)疆 Posted @ 2006-12-01 10:31
      使用JavaScript對(duì)XML文件進(jìn)行讀寫(xiě)
      以學(xué)生信息為例子。
      用到了3個(gè)文件studentINFO.html,studentinfo.xml,studentinfoNew.xml

      studentinfo.xml---學(xué)生信息
      <?xml version="1.0"?>
      <studentlist>
      <student>
      <id>213</id>
      <name>asd</name>
      <age>sdf</age>
      </student>
      <student>
      <id>rfwer</id>
      <name></name>
      <age></age>
      </student></studentlist>

      studentinfoNew.xml---新添加的空的學(xué)生信息模版
      <?xml version="1.0" encoding="gb2312"?>
      <studentlist>
      <student>
      <id></id>
      <name></name>
      <age></age>
      </student>
      </studentlist>

      studentINFO.html---增刪改的用戶UI
      <HTML><BODY bgColor=#a1bae6>
      <XML id=xmldso src="studentinfo.xml"></XML>
      <XML id=studentinfoNew></XML> <!--加?xml數(shù)據(jù)-->
      <SCRIPT Language=JavaScript>
      studentinfoNew.async = false;
      studentinfoNew.load("studentinfoNew.xml");

      function display(){
      var doc=xmldso.XMLDocument;
      alert(doc.xml);
      }

      function save(){
      try{
      var doc=xmldso.XMLDocument;
      alert(doc.xml);
      var strFile="";
      var fso, f, ts;
      var s="E:\\習(xí)う\\XML\\javascript_ReadWriteXML\\studentinfo.xml";
      var ForReading = 1, ForWriting = 2, ForAppending = 8;
      var TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0;
      fso = new ActiveXObject("Scripting.FileSystemObject");
      if(!fso.FileExists(s)){
      alert(s+" is not exist!");
      }else{
      f = fso.GetFile(s);
      ts = f.OpenAsTextStream(ForWriting, TristateUseDefault);
      ts.WriteLine(doc.xml);
      ts.Close( );
      }
      }catch(e){
      alert(e);
      }

      }

      //增加??;
      function addID(){
      var doc=xmldso.XMLDocument;
      var rootnode=doc.documentElement;
      var sortNode = rootnode.selectNodes("http://id");
      var currentid = sortNode.length-1;
      var cc="";
      if(currentid==-1){
      var node= studentinfoNew.documentElement.childNodes(0).cloneNode(true);
      xmldso.documentElement.appendChild(node);
      }else{
      cc=sortNode.item(currentid).text;
      if ((cc=="aa")||(cc=="")){
      alert("?將最后一行數(shù)據(jù)填寫(xiě)完?后再增加新的??!");
      }else{
      var node= studentinfoNew.documentElement.childNodes(0).cloneNode(true);
      xmldso.documentElement.appendChild(node);
      }
      }
      }
      //?除??
      function delID(whichFld){
      var doc=xmldso.XMLDocument;
      var rootnode=doc.documentElement;
      var sortNode = rootnode.selectNodes("http://student");
      if(sortNode.length==1){
      alert("can not do delete when there is only 1 record");
      return;
      }

      var sortNode = xmldso.selectSingleNode("http://student/id[text()='"+whichFld+"']");
      try{
      sortNode.parentNode.parentNode.removeChild(sortNode.parentNode);
      }catch(e){
      }
      }
      </SCRIPT>

      <center><b>student-studentlist</b><br><br>
      <TABLE id="table" DATASRC='#xmldso' BORDER CELLPADDING=3>
      <!--?行數(shù)據(jù)?定-->
      <THEAD><TH>ID</TH><TH>id</TH><TH>name</TH><TH>age</TH></THEAD>
      <TR>
      <TD><acronym title='點(diǎn)?即可?除???'><INPUT TYPE=button size=4 DATAFLD="id" onclick="delID(this.value)"></acronym></TD>
      <TD><INPUT TYPE=TEXT DATAFLD="id"></TD>
      <TD><INPUT TYPE=TEXT DATAFLD="name"></TD>
      <TD><INPUT TYPE=TEXT DATAFLD="age"></TD>
      </TR>
      </TABLE>
      <INPUT TYPE=BUTTON name=dd id=dd VALUE="add" onclick="addID();">
      <INPUT TYPE=BUTTON name=cc id=cc VALUE="save" onclick="save()">
      <INPUT TYPE=BUTTON name=ee id=ee VALUE="display" onclick="display()"></center></BODY></HTML>


      ??回復(fù)??

    • #?re: Javascript-文件操作??self Posted @ 2006-12-01 14:04
      當(dāng)js不能創(chuàng)建文件對(duì)象時(shí),可以在運(yùn)行中運(yùn)行regsvr32 scrrun.dll,來(lái)啟用這個(gè)程序,
      如果還不行,在ie的安全級(jí)別里設(shè)置中級(jí)即可。??回復(fù)??

    • #?re: Javascript-文件操作??self Posted @ 2006-12-01 16:06
      下面是我寫(xiě)的一個(gè)js讀寫(xiě)文件程序:
      1.<!-- &copy;zhanglijun 2006-12-1
      任務(wù):js創(chuàng)建文件,寫(xiě)入數(shù)據(jù),并讀出數(shù)據(jù)
      增加數(shù)據(jù),修改數(shù)據(jù),刪除數(shù)據(jù)。
      -->
      <html>
      <head>
      <title>jsIO</title>
      </head>
      <script type="text/javascript"src="fileIO.js" ></script>
      <body ><p align="center">
      指定文件夾:<input type="text"id="path"/><br>
      文件名稱:
      <input type=text id="name" /><br>
      文件內(nèi)容:
      <textarea id="content" width=20px height=35px></textarea><br>
      <input type=button value="創(chuàng)建" onclick="return createfile();"/>
      <input type=button value="讀數(shù)據(jù)" onclick="return readfile();"/>
      <br><br><br><br><br><br><br><br><br><br><br><br><br>
      請(qǐng)先在運(yùn)行中運(yùn)行regsvr32 scrrun.dll<br>
      然后在ie的安全-->自定義級(jí)別里-->重置為-->選擇中級(jí)
      </p>
      </body>
      2 fileIO.js
      /*
      *js 文件讀寫(xiě)模塊 by zhanglijun 2006-12-1
      */


      function createfile(){
      if(check()==false)return false;
      var name=document.getElementById("name").value;
      var name1=name.split(".");
      if(name1[1]==undefined)name=name+".txt";
      //alert(name);
      pathAndName=document.getElementById("path").value+name;
      //alert(pathAndName);
      var fso=new ActiveXObject("Scripting.FileSystemObject");
      var f1=fso.createTextFile(pathAndName);
      if(!f1)alert("文件創(chuàng)建失敗");
      else alert("文件成功創(chuàng)建,下面繼續(xù)寫(xiě)入內(nèi)容");
      f1.Write(document.getElementById("content").value);
      if(f1.read()!="")alert("內(nèi)容已經(jīng)寫(xiě)入");
      f1.close();
      }

      function readfile(){
      if(checkRead()==false)return false;
      var name=document.getElementById("name").value;
      var name1=name.split(".");
      if(name1[1]==undefined)name=name+".txt";
      //alert(name1[1]);
      pathAndName=document.getElementById("path").value+name;
      //alert(pathAndName);
      var fso=new ActiveXObject("Scripting.FileSystemObject");
      var f2
      try{
      f2=fso.openTextFile(pathAndName);
      }catch(e){alert(name+"沒(méi)找到");}
      var a="";
      while (!f2.AtEndOfStream){
      a += f2.ReadLine( );}
      f2.Close( );
      content.innerHTML=a;
      alert("它的位置在"+pathAndName);
      }
      function check(){
      if(document.getElementById("name").value==""||document.getElementById("content").value=="")
      {alert("文件名和內(nèi)容都不能為空!");
      document.getElementById("name").focus(); return false;}

      }function checkRead(){
      if(document.getElementById("name").value=="")
      {alert("文件名和內(nèi)容都不能為空!");
      document.getElementById("name").focus(); return false;}

      }
      function changeSrc(filePicker)
      {
      oFileChecker.src = filePicker.value;
      }
      </html>??回復(fù)??

    • #?re: Javascript-文件操作??self Posted @ 2006-12-01 16:40
      利用js fso對(duì)象寫(xiě)xml文件
      <html><head>
      <title>oprateXML</title>
      </head>
      <script type="text/javascript">
      <!--
      function createXml(){

      var fso, tempfolder, xmlfile, schar;
      fso = new ActiveXObject("Scripting.FileSystemObject");
      xmlfile = fso.CreateTextFile("C:\\test2.XML",true,true);
      schar = '\r';
      xmlfile.WriteLine('<?xml version="1.0" encoding="UTF-16" ?>'+schar);
      xmlfile.WriteLine('<document title="information">'+schar);
      for(var i=0;i<10;i++){
      xmlfile.WriteLine('<xmlnode type="node" name="node'+i+'" />'+schar);
      }
      xmlfile.WriteLine('</document>');
      xmlfile.Close();
      }
      --></script>
      <body>
      <input type="button" value="寫(xiě)xml文件" onclick="createXml()"/>
      </body>
      </html>
      結(jié)果如下:
      <?xml version="1.0" encoding="UTF-16" ?>
      - <document title="information">
      <xmlnode type="node" name="node0" />
      <xmlnode type="node" name="node1" />
      <xmlnode type="node" name="node2" />
      <xmlnode type="node" name="node3" />
      <xmlnode type="node" name="node4" />
      <xmlnode type="node" name="node5" />
      <xmlnode type="node" name="node6" />
      <xmlnode type="node" name="node7" />
      <xmlnode type="node" name="node8" />
      <xmlnode type="node" name="node9" />
      </document>??回復(fù)??

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 国产精品视频免费观看| 亚洲午夜精品久久久久久人妖| 中文字幕免费在线| 一区二区三区免费精品视频| 亚洲男人天堂2022| 亚洲精品在线免费观看视频| 国产日韩成人亚洲丁香婷婷| 精品少妇人妻AV免费久久洗澡| 114一级毛片免费| 久章草在线精品视频免费观看| 一级特黄aaa大片免费看| 亚洲精品亚洲人成在线| 亚洲人成网网址在线看| 噜噜噜亚洲色成人网站∨| 亚洲精品无码mv在线观看网站| 亚洲AⅤ无码一区二区三区在线| 精品国产一区二区三区免费看| av无码国产在线看免费网站| 亚洲精品视频免费看| 九九精品成人免费国产片| 国产伦精品一区二区免费| 成人a毛片免费视频观看| 人妻巨大乳hd免费看| 黄色a级片免费看| 高潮毛片无遮挡高清免费视频| 青草久久精品亚洲综合专区| 国产亚洲欧美在线观看| 亚洲av日韩av永久无码电影| 亚洲av乱码一区二区三区按摩| 亚洲人成色在线观看| 色综合久久精品亚洲国产| 国产成人精品亚洲一区| 国产精品亚洲一区二区无码| 精品免费AV一区二区三区| 美女视频黄.免费网址| 国产99视频精品免费视频76| 国产精品成人69XXX免费视频| 国产色爽免费无码视频| 国产成人精品免费久久久久| 57pao一国产成视频永久免费 | 久久亚洲综合色一区二区三区|