日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java中的IO整理完整版

發(fā)布時間:2025/3/13 java 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java中的IO整理完整版 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文章基本覆蓋了java IO的全部內容,java新IO沒有涉及,因為我想和這個分開,以突出那個的重要性,新IO哪一篇文章還沒有開始寫,估計很快就能和大家見面。照舊,文章依舊以例子為主,因為講解內容的java書很多了,我覺的學以致用才是真。代碼是寫出來的,不是看出來的。

最后歡迎大家提出意見和建議。

【案例1】創(chuàng)建一個新文件

  • import?java.io.*; ?
  • class?hello{ ?
  • ????public?static?void?main(String[]?args)?{ ?
  • ????????File?f=new?File("D:\\hello.txt"); ?
  • ????????try{ ?
  • ????????????f.createNewFile(); ?
  • ????????}catch?(Exception?e)?{ ?
  • ????????????e.printStackTrace(); ?
  • ????????} ?
  • ????} ?
  • }?
  • 【運行結果】:

    程序運行之后,在d盤下會有一個名字為hello.txt的文件。

    【案例2】File類的兩個常量

  • import?java.io.*; ?
  • class?hello{ ?
  • ????public?static?void?main(String[]?args)?{ ?
  • ????????System.out.println(File.separator); ?
  • ????????System.out.println(File.pathSeparator); ?
  • ????} ?
  • }?
  • 【運行結果】:
    \
    ;
    此處多說幾句:有些同學可能認為,我直接在windows下使用\進行分割不行嗎?當然是可以的。但是在linux下就不是\了。所以,要想使得我們的代碼跨平臺,更加健壯,所以,大家都采用這兩個常量吧,其實也多寫不了幾行。呵呵、

    現在我們使用File類中的常量改寫上面的代碼:

  • import?java.io.*; ?
  • class?hello{ ?
  • ????public?static?void?main(String[]?args)?{ ?
  • ????????String?fileName="D:"+File.separator+"hello.txt"; ?
  • ????????File?f=new?File(fileName); ?
  • ????????try{ ?
  • ????????????f.createNewFile(); ?
  • ????????}catch?(Exception?e)?{ ?
  • ????????????e.printStackTrace(); ?
  • ????????} ?
  • ????} ?
  • }?
  • 你看,沒有多寫多少吧,呵呵。所以建議使用File類中的常量。

    刪除一個文件??f.delete();

  • /** ?
  • ?*?刪除一個文件 ?
  • ?*?*/?
  • import?java.io.*; ?
  • class?hello{ ?
  • ????public?static?void?main(String[]?args)?{ ?
  • ????????String?fileName="D:"+File.separator+"hello.txt"; ?
  • ????????File?f=new?File(fileName); ?
  • ????????if(f.exists()){ ?
  • ????????????f.delete(); ?
  • ????????}else{ ?
  • ????????????System.out.println("文件不存在"); ?
  • ????????} ?
  • ???????? ?
  • ????} ?
  • }?
  • 創(chuàng)建一個文件夾

  • /** ?;
  • ?*?創(chuàng)建一個文件夾 ?f.mkdir();
  • ?*?*/?
  • import?java.io.*; ?
  • class?hello{ ?
  • ????public?static?void?main(String[]?args)?{ ?
  • ????????String?fileName="D:"+File.separator+"hello"; ?
  • ????????File?f=new?File(fileName); ?
  • ????????f.mkdir(); ?
  • ????} ?
  • }?
  • 【運行結果】:

    D盤下多了一個hello文件夾

    列出指定目錄的全部文件(包括隱藏文件):

  • /** ?
  • ?*?使用list列出指定目錄的全部文件 ??String[]?str=f.list();?
  • ?*?*/?
  • import?java.io.*; ?
  • class?hello{ ?
  • ????public?static?void?main(String[]?args)?{ ?
  • ????????String?fileName="D:"+File.separator; ?
  • ????????File?f=new?File(fileName); ?
  • ????????String[]?str=f.list(); ?
  • ????????for?(int?i?=?0;?i?<?str.length;?i++)?{ ?
  • ????????????System.out.println(str[i]); ?
  • ????????} ?
  • ????} ?
  • }?
  • 【運行結果】:

    $RECYCLE.BIN

    360

    360Downloads

    360Rec

    360SoftMove

    Config.Msi

    da

    Downloads

    DriversBackup

    eclipse

    java web整合開發(fā)和項目實戰(zhàn)

    Lenovo

    MSOCache

    Program

    Program Files

    python

    RECYGLER.{8F92DA15-A229-A4D5-B5CE-5280C8B89C19}

    System Volume Information

    Tomcat6

    var

    vod_cache_data

    新建文件夾

    (你的運行結果應該和這個不一樣的,呵呵)

    但是使用list返回的是String數組,。而且列出的不是完整路徑,如果想列出完整路徑的話,需要使用listFiles.他返回的是File的數組

    列出指定目錄的全部文件(包括隱藏文件):?String[]?str=f.list();?

  • /** ?
  • ?*?使用listFiles列出指定目錄的全部文件 ?
  • ?*?listFiles輸出的是完整路徑 ?
  • ?*?*/?
  • import?java.io.*; ?
  • class?hello{ ?
  • ????public?static?void?main(String[]?args)?{ ?
  • ????????String?fileName="D:"+File.separator; ?
  • ????????File?f=new?File(fileName); ?
  • ????????File[]?str=f.listFiles(); ?
  • ????????for?(int?i?=?0;?i?<?str.length;?i++)?{ ?
  • ????????????System.out.println(str[i]); ?
  • ????????} ?
  • ????} ?
  • }?
  • 【運行結果】:

    D:\$RECYCLE.BIN

    D:\360

    D:\360Downloads

    D:\360Rec

    D:\360SoftMove

    D:\Config.Msi

    D:\da

    D:\Downloads

    D:\DriversBackup

    D:\eclipse

    D:\java web整合開發(fā)和項目實戰(zhàn)

    D:\Lenovo

    D:\MSOCache

    D:\Program

    D:\Program Files

    D:\python

    D:\RECYGLER.{8F92DA15-A229-A4D5-B5CE-5280C8B89C19}

    D:\System Volume Information

    D:\Tomcat6

    D:\var

    D:\vod_cache_data

    D:\新建文件夾

    通過比較可以指定,使用listFiles更加方便、

    判斷一個指定的路徑是否為目錄

  • /** ?
  • ?*?使用isDirectory判斷一個指定的路徑是否為目錄 ?
  • ?*?*/?
  • import?java.io.*; ?
  • class?hello{ ?
  • ????public?static?void?main(String[]?args)?{ ?
  • ????????String?fileName="D:"+File.separator; ?
  • ????????File?f=new?File(fileName); ?
  • ????????if(f.isDirectory()){ ?
  • ????????????System.out.println("YES"); ?
  • ????????}else{ ?
  • ????????????System.out.println("NO"); ?
  • ????????} ?
  • ????} ?
  • }?
  • 【運行結果】:YES

    搜索指定目錄的全部內容

  • /** ?
  • ?*?列出指定目錄的全部內容 ?
  • ?*?*/?
  • import?java.io.*; ?
  • class?hello{ ?
  • ????public?static?void?main(String[]?args)?{ ?
  • ????????String?fileName="D:"+File.separator; ?
  • ????????File?f=new?File(fileName); ?
  • ????????print(f); ?
  • ????} ?
  • ????public?static?void?print(File?f){ ?
  • ????????if(f!=null){ ?
  • ????????????if(f.isDirectory()){ ?
  • ????????????????File[]?fileArray=f.listFiles(); ?
  • ????????????????if(fileArray!=null){ ?
  • ????????????????????for?(int?i?=?0;?i?<?fileArray.length;?i++)?{ ?
  • ????????????????????????//遞歸調用 ?
  • ????????????????????????print(fileArray[i]); ?
  • ????????????????????} ?
  • ????????????????} ?
  • ????????????} ?
  • ????????????else{ ?
  • ????????????????System.out.println(f); ?
  • ????????????} ?
  • ????????} ?
  • ????} ?
  • }?
  • 【運行結果】:

    D:\Tomcat6\work\Catalina\localhost\nevel\org\apache\jsp\framepages\web4welcome_jsp.java

    D:\Tomcat6\work\Catalina\localhost\nevel\org\apache\jsp\help_005fhome_jsp.class

    D:\Tomcat6\work\Catalina\localhost\nevel\org\apache\jsp\help_005fhome_jsp.java

    D:\Tomcat6\work\Catalina\localhost\nevel\org\apache\jsp\home_jsp.class

    D:\Tomcat6\work\Catalina\localhost\nevel\org\apache\jsp\home_jsp.java

    D:\Tomcat6\work\Catalina\localhost\nevel\org\apache\jsp\index_jsp.class

    D:\Tomcat6\work\Catalina\localhost\nevel\org\apache\jsp\index_jsp.java

    D:\Tomcat6\work\Catalina\localhost\nevel\org\apache\jsp\login_jsp.class

    D:\Tomcat6\work\Catalina\localhost\nevel\org\apache\jsp\login_jsp.java

    D:\Tomcat6\work\Catalina\localhost\nevel\org\apache\jsp\modify_005fuser_005finfo_jsp.class

    D:\Tomcat6\work\Catalina\localhost\nevel\org\apache\jsp\modify_005fuser_005finfo_jsp.java

    D:\Tomcat6\work\Catalina\localhost\nevel\org\apache\jsp\register_005fnotify_jsp.class

    D:\Tomcat6\work\Catalina\localhost\nevel\org\apache\jsp\register_005fnotify_jsp.java

    D:\Tomcat6\work\Catalina\localhost\nevel\org\apache\jsp\sign_005fup_jsp.class

    D:\Tomcat6\work\Catalina\localhost\nevel\org\apache\jsp\sign_005fup_jsp.java

    D:\Tomcat6\work\Catalina\localhost\nevel\org\apache\jsp\transit_jsp.class

    ……

    【使用RandomAccessFile寫入文件】

  • /** ?
  • ?*?使用RandomAccessFile寫入文件 ?
  • ?*?*/?
  • import?java.io.*; ?
  • class?hello{ ?
  • ????public?static?void?main(String[]?args)?throws?IOException?{ ?
  • ????????String?fileName="D:"+File.separator+"hello.txt"; ?
  • ????????File?f=new?File(fileName); ?
  • ????????RandomAccessFile?demo=new?RandomAccessFile(f,"rw"); ?
  • ????????demo.writeBytes("asdsad"); ?
  • ????????demo.writeInt(12); ?
  • ????????demo.writeBoolean(true); ?
  • ????????demo.writeChar('A'); ?
  • ????????demo.writeFloat(1.21f); ?
  • ????????demo.writeDouble(12.123); ?
  • ????????demo.close();??? ?
  • ????} ?
  • }?
  • 如果你此時打開hello。txt查看的話,會發(fā)現那是亂碼。

    字節(jié)流

    【向文件中寫入字符串】

  • /** ?
  • ?*?字節(jié)流 ?
  • ?*?向文件中寫入字符串 ?
  • ?*?*/?
  • import?java.io.*; ?
  • class?hello{ ?
  • ????public?static?void?main(String[]?args)?throws?IOException?{ ?
  • ????????String?fileName="D:"+File.separator+"hello.txt"; ?
  • ????????File?f=new?File(fileName); ?
  • ????????OutputStream?out?=new?FileOutputStream(f); ?
  • ????????String?str="你好"; ?
  • ????????byte[]?b=str.getBytes(); ?
  • ????????out.write(b); ?
  • ????????out.close(); ?
  • ????} ?
  • }?
  • 查看hello.txt會看到“你好”

    當然也可以一個字節(jié)一個字節(jié)的寫。

  • /** ?
  • ?*?字節(jié)流 ?
  • ?*?向文件中一個字節(jié)一個字節(jié)的寫入字符串 ?
  • ?*?*/?
  • import?java.io.*; ?
  • class?hello{ ?
  • ????public?static?void?main(String[]?args)?throws?IOException?{ ?
  • ????????String?fileName="D:"+File.separator+"hello.txt"; ?
  • ????????File?f=new?File(fileName); ?
  • ????????OutputStream?out?=new?FileOutputStream(f); ?
  • ????????String?str="你好"; ?
  • ????????byte[]?b=str.getBytes(); ?
  • ????????for?(int?i?=?0;?i?<?b.length;?i++)?{ ?
  • ????????????out.write(b[i]); ?
  • ????????} ?
  • ????????out.close(); ?
  • ????} ?
  • }?
  • 結果還是:“你好”

    向文件中追加新內容:

  • /** ?
  • ?*?字節(jié)流 ?
  • ?*?向文件中追加新內容: ?
  • ?*?*/?
  • import?java.io.*; ?
  • class?hello{ ?
  • ????public?static?void?main(String[]?args)?throws?IOException?{ ?
  • ????????String?fileName="D:"+File.separator+"hello.txt"; ?
  • ????????File?f=new?File(fileName); ?
  • ????????OutputStream?out?=new?FileOutputStream(f,true); ?
  • ????????String?str="Rollen"; ?
  • ????????//String?str="\r\nRollen";??可以換行 ?
  • ????????byte[]?b=str.getBytes(); ?
  • ????????for?(int?i?=?0;?i?<?b.length;?i++)?{ ?
  • ????????????out.write(b[i]); ?
  • ????????} ?
  • ????????out.close(); ?
  • ????} ?
  • }?
  • 【運行結果】:

    你好Rollen

    【讀取文件內容】

  • /** ?
  • ?*?字節(jié)流 ?
  • ?*?讀文件內容 ?
  • ?*?*/?
  • import?java.io.*; ?
  • class?hello{ ?
  • ????public?static?void?main(String[]?args)?throws?IOException?{ ?
  • ????????String?fileName="D:"+File.separator+"hello.txt"; ?
  • ????????File?f=new?File(fileName); ?
  • ????????InputStream?in=new?FileInputStream(f); ?
  • ????????byte[]?b=new?byte[1024]; ?
  • ????????in.read(b); ?
  • ????????in.close(); ?
  • ????????System.out.println(new?String(b)); ?
  • ????} ?
  • }?
  • 【運行結果】
    你好Rollen

    Rollen_

    但是這個例子讀取出來會有大量的空格,我們可以利用in.read(b);的返回值來設計程序。如下:

  • /** ?
  • ?*?字節(jié)流 ?
  • ?*?讀文件內容 ?
  • ?*?*/?
  • import?java.io.*; ?
  • class?hello{ ?
  • ????public?static?void?main(String[]?args)?throws?IOException?{ ?
  • ????????String?fileName="D:"+File.separator+"hello.txt"; ?
  • ????????File?f=new?File(fileName); ?
  • ????????InputStream?in=new?FileInputStream(f); ?
  • ????????byte[]?b=new?byte[1024]; ?
  • ????????int?len=in.read(b); ?
  • ????????in.close(); ?
  • ????????System.out.println("讀入長度為:"+len); ?
  • ????????System.out.println(new?String(b,0,len)); ?
  • ????} ?
  • }?
  • 【運行結果】:

    讀入長度為:18

    你好Rollen

    Rollen

    讀者觀察上面的例子可以看出,我們預先申請了一個指定大小的空間,但是有時候這個空間可能太小,有時候可能太大,我們需要準確的大小,這樣節(jié)省空間,那么我們可以這樣干:

  • /** ?
  • ?*?字節(jié)流 ?
  • ?*?讀文件內容,節(jié)省空間 ?
  • ?*?*/?
  • import?java.io.*; ?
  • class?hello{ ?
  • ????public?static?void?main(String[]?args)?throws?IOException?{ ?
  • ????????String?fileName="D:"+File.separator+"hello.txt"; ?
  • ????????File?f=new?File(fileName); ?
  • ????????InputStream?in=new?FileInputStream(f); ?
  • ????????byte[]?b=new?byte[(int)f.length()]; ?
  • ????????in.read(b); ?
  • ????????System.out.println("文件長度為:"+f.length()); ?
  • ????????in.close(); ?
  • ????????System.out.println(new?String(b)); ?
  • ????} ?
  • }?
  • 文件長度為:18

    你好Rollen

    Rollen

    將上面的例子改為一個一個讀:

  • /** ?
  • ?*?字節(jié)流 ?
  • ?*?讀文件內容,節(jié)省空間 ?
  • ?*?*/?
  • import?java.io.*; ?
  • class?hello{ ?
  • ????public?static?void?main(String[]?args)?throws?IOException?{ ?
  • ????????String?fileName="D:"+File.separator+"hello.txt"; ?
  • ????????File?f=new?File(fileName); ?
  • ????????InputStream?in=new?FileInputStream(f); ?
  • ????????byte[]?b=new?byte[(int)f.length()]; ?
  • ????????for?(int?i?=?0;?i?<?b.length;?i++)?{ ?
  • ????????????b[i]=(byte)in.read(); ?
  • ????????} ?
  • ????????in.close(); ?
  • ????????System.out.println(new?String(b)); ?
  • ????} ?
  • }?
  • 輸出的結果和上面的一樣。

    細心的讀者可能會發(fā)現,上面的幾個例子都是在知道文件的內容多大,然后才展開的,有時候我們不知道文件有多大,這種情況下,我們需要判斷是否獨到文件的末尾。

  • /** ?
  • ?*?字節(jié)流 ?
  • ?*讀文件 ?
  • ?*?*/?
  • import?java.io.*; ?
  • class?hello{ ?
  • ????public?static?void?main(String[]?args)?throws?IOException?{ ?
  • ????????String?fileName="D:"+File.separator+"hello.txt"; ?
  • ????????File?f=new?File(fileName); ?
  • ????????InputStream?in=new?FileInputStream(f); ?
  • ????????byte[]?b=new?byte[1024]; ?
  • ????????int?count?=0; ?
  • ????????int?temp=0; ?
  • ????????while((temp=in.read())!=(-1)){ ?
  • ????????????b[count++]=(byte)temp; ?
  • ????????} ?
  • ????????in.close(); ?
  • ????????System.out.println(new?String(b)); ?
  • ????} ?
  • }?
  • 【運行結果】

    你好Rollen

    Rollen_

    提醒一下,當獨到文件末尾的時候會返回-1.正常情況下是不會返回-1的


    字符流

    【向文件中寫入數據】

    現在我們使用字符流

  • /** ?
  • ?*?字符流 ?
  • ?*?寫入數據 ?
  • ?*?*/?
  • import?java.io.*; ?
  • class?hello{ ?
  • ????public?static?void?main(String[]?args)?throws?IOException?{ ?
  • ????????String?fileName="D:"+File.separator+"hello.txt"; ?
  • ????????File?f=new?File(fileName); ?
  • ????????Writer?out?=new?FileWriter(f); ?
  • ????????String?str="hello"; ?
  • ????????out.write(str); ?
  • ????????out.close(); ?
  • ????} ?
  • }?
  • 當你打開hello。txt的時候,會看到hello

    其實這個例子上之前的例子沒什么區(qū)別,只是你可以直接輸入字符串,而不需要你將字符串轉化為字節(jié)數組。

    當你如果想問文件中追加內容的時候,可以使用將上面的聲明out的哪一行換為:

    Writer out =new FileWriter(f,true);

    這樣,當你運行程序的時候,會發(fā)現文件內容變?yōu)?#xff1a;

    hellohello如果想在文件中換行的話,需要使用“\r\n”

    比如將str變?yōu)镾tring str="\r\nhello";

    這樣文件追加的str的內容就會換行了。

    從文件中讀內容:

  • /** ?
  • ?*?字符流 ?
  • ?*?從文件中讀出內容 ?
  • ?*?*/?
  • import?java.io.*; ?
  • class?hello{ ?
  • ????public?static?void?main(String[]?args)?throws?IOException?{ ?
  • ????????String?fileName="D:"+File.separator+"hello.txt"; ?
  • ????????File?f=new?File(fileName); ?
  • ????????char[]?ch=new?char[100]; ?
  • ????????Reader?read=new?FileReader(f); ?
  • ????????int?count=read.read(ch); ?
  • ????????read.close(); ?
  • ????????System.out.println("讀入的長度為:"+count); ?
  • ????????System.out.println("內容為"+new?String(ch,0,count)); ?
  • ????} ?
  • }?
  • 【運行結果】:

    讀入的長度為:17

    內容為hellohello

    hello

    當然最好采用循環(huán)讀取的方式,因為我們有時候不知道文件到底有多大。

  • /** ?
  • ?*?字符流 ?
  • ?*?從文件中讀出內容 ?
  • ?*?*/?
  • import?java.io.*; ?
  • class?hello{ ?
  • ????public?static?void?main(String[]?args)?throws?IOException?{ ?
  • ????????String?fileName="D:"+File.separator+"hello.txt"; ?
  • ????????File?f=new?File(fileName); ?
  • ????????char[]?ch=new?char[100]; ?
  • ????????Reader?read=new?FileReader(f); ?
  • ????????int?temp=0; ?
  • ????????int?count=0; ?
  • ????????while((temp=read.read())!=(-1)){ ?
  • ????????????ch[count++]=(char)temp; ?
  • ????????} ?
  • ????????read.close(); ?
  • ????????System.out.println("內容為"+new?String(ch,0,count)); ?
  • ????} ?
  • }?
  • 運行結果:

    內容為hellohello

    hello

    關于字節(jié)流和字符流的區(qū)別

    實際上字節(jié)流在操作的時候本身是不會用到緩沖區(qū)的,是文件本身的直接操作的,但是字符流在操作的 時候下后是會用到緩沖區(qū)的,是通過緩沖區(qū)來操作文件的。

    讀者可以試著將上面的字節(jié)流和字符流的程序的最后一行關閉文件的代碼注釋掉,然后運行程序看看。你就會發(fā)現使用字節(jié)流的話,文件中已經存在內容,但是使用字符流的時候,文件中還是沒有內容的,這個時候就要刷新緩沖區(qū)。

    使用字節(jié)流好還是字符流好呢?

    答案是字節(jié)流。首先因為硬盤上的所有文件都是以字節(jié)的形式進行傳輸或者保存的,包括圖片等內容。但是字符只是在內存中才會形成的,所以在開發(fā)中,字節(jié)流使用廣泛。

    文件的復制

    其實DOS下就有一個文件復制功能,比如我們想把d盤下面的hello.txt文件復制到d盤下面的rollen.txt文件中,那么我們就可以使用下面的命令:

    copy d:\hello.txt d:\rollen.txt

    運行之后你會在d盤中看見hello.txt.,并且兩個文件的內容是一樣的,(這是屁話)

    下面我們使用程序來復制文件吧。

    基本思路還是從一個文件中讀入內容,邊讀邊寫入另一個文件,就是這么簡單。、

    首先編寫下面的代碼:

  • /** ?
  • ?*?文件的復制 ?
  • ?*?*/?
  • import?java.io.*; ?
  • class?hello{ ?
  • ????public?static?void?main(String[]?args)?throws?IOException?{ ?
  • ????????if(args.length!=2){ ?
  • ????????????System.out.println("命令行參數輸入有誤,請檢查"); ?
  • ????????????System.exit(1); ?
  • ????????} ?
  • ????????File?file1=new?File(args[0]); ?
  • ????????File?file2=new?File(args[1]); ?
  • ???????? ?
  • ????????if(!file1.exists()){ ?
  • ????????????System.out.println("被復制的文件不存在"); ?
  • ????????????System.exit(1); ?
  • ????????} ?
  • ????????InputStream?input=new?FileInputStream(file1); ?
  • ????????OutputStream?output=new?FileOutputStream(file2); ?
  • ????????if((input!=null)&&(output!=null)){ ?
  • ????????????int?temp=0; ?
  • ????????????while((temp=input.read())!=(-1)){ ?
  • ????????????????output.write(temp); ?
  • ????????????} ?
  • ????????} ?
  • ????????input.close(); ?
  • ????????output.close();? ?
  • ????} ?
  • }?
  • 然后在命令行下面

    javac hello.java

    java hello d:\hello.txt d:\rollen.txt

    現在你就會在d盤看到rollen。txt了,

    OutputStreramWriter 和InputStreamReader類

    整個IO類中除了字節(jié)流和字符流還包括字節(jié)和字符轉換流。

    OutputStreramWriter將輸出的字符流轉化為字節(jié)流

    InputStreamReader將輸入的字節(jié)流轉換為字符流

    但是不管如何操作,最后都是以字節(jié)的形式保存在文件中的。

    將字節(jié)輸出流轉化為字符輸出流

  • /** ?
  • ?*?將字節(jié)輸出流轉化為字符輸出流 ?
  • ?*?*/?
  • import?java.io.*; ?
  • class?hello{ ?
  • ????public?static?void?main(String[]?args)?throws?IOException?{ ?
  • ????????String?fileName=?"d:"+File.separator+"hello.txt"; ?
  • ????????File?file=new?File(fileName); ?
  • ????????Writer?out=new?OutputStreamWriter(new?FileOutputStream(file)); ?
  • ????????out.write("hello"); ?
  • ????????out.close(); ?
  • ????} ?
  • }?
  • 運行結果:文件中內容為:hello

    將字節(jié)輸入流變?yōu)樽址斎肓?/p>

  • /** ?
  • ?*?將字節(jié)輸入流變?yōu)樽址斎肓??
  • ?*?*/?
  • import?java.io.*; ?
  • class?hello{ ?
  • ????public?static?void?main(String[]?args)?throws?IOException?{ ?
  • ????????String?fileName=?"d:"+File.separator+"hello.txt"; ?
  • ????????File?file=new?File(fileName); ?
  • ????????Reader?read=new?InputStreamReader(new?FileInputStream(file)); ?
  • ????????char[]?b=new?char[100]; ?
  • ????????int?len=read.read(b); ?
  • ????????System.out.println(new?String(b,0,len)); ?
  • ????????read.close(); ?
  • ????} ?
  • }?
  • 【運行結果】:hello

    前面列舉的輸出輸入都是以文件進行的,現在我們以內容為輸出輸入目的地,使用內存操作流

    ByteArrayInputStream 主要將內容寫入內容

    ByteArrayOutputStream 主要將內容從內存輸出

    使用內存操作流將一個大寫字母轉化為小寫字母

  • /** ?
  • ?*?使用內存操作流將一個大寫字母轉化為小寫字母 ?
  • ?*?*/?
  • import?java.io.*; ?
  • class?hello{ ?
  • ????public?static?void?main(String[]?args)?throws?IOException?{ ?
  • ????????String?str="ROLLENHOLT"; ?
  • ????????ByteArrayInputStream?input=new?ByteArrayInputStream(str.getBytes()); ?
  • ????????ByteArrayOutputStream?output=new?ByteArrayOutputStream(); ?
  • ????????int?temp=0; ?
  • ????????while((temp=input.read())!=-1){ ?
  • ????????????char?ch=(char)temp; ?
  • ????????????output.write(Character.toLowerCase(ch)); ?
  • ????????} ?
  • ????????String?outStr=output.toString(); ?
  • ????????input.close(); ?
  • ????????output.close(); ?
  • ????????System.out.println(outStr); ?
  • ????} ?
  • }?
  • 【運行結果】:

    rollenholt

    內容操作流一般使用來生成一些臨時信息采用的,這樣可以避免刪除的麻煩。


    管道流

    管道流主要可以進行兩個線程之間的通信。

    PipedOutputStream 管道輸出流

    PipedInputStream 管道輸入流

    驗證管道流

  • /** ?
  • ?*?驗證管道流 ?
  • ?*?*/?
  • import?java.io.*; ?
  • ?
  • /** ?
  • ?*?消息發(fā)送類 ?
  • ?*?*/?
  • class?Send?implements?Runnable{ ?
  • ????private?PipedOutputStream?out=null; ?
  • ????public?Send()?{ ?
  • ????????out=new?PipedOutputStream(); ?
  • ????} ?
  • ????public?PipedOutputStream?getOut(){ ?
  • ????????return?this.out; ?
  • ????} ?
  • ????public?void?run(){ ?
  • ????????String?message="hello?,?Rollen"; ?
  • ????????try{ ?
  • ????????????out.write(message.getBytes()); ?
  • ????????}catch?(Exception?e)?{ ?
  • ????????????e.printStackTrace(); ?
  • ????????}try{ ?
  • ????????????out.close(); ?
  • ????????}catch?(Exception?e)?{ ?
  • ????????????e.printStackTrace(); ?
  • ????????} ?
  • ????} ?
  • } ?
  • ?
  • /** ?
  • ?*?接受消息類 ?
  • ?*?*/?
  • class?Recive?implements?Runnable{ ?
  • ????private?PipedInputStream?input=null; ?
  • ????public?Recive(){ ?
  • ????????this.input=new?PipedInputStream(); ?
  • ????} ?
  • ????public?PipedInputStream?getInput(){ ?
  • ????????return?this.input; ?
  • ????} ?
  • ????public?void?run(){ ?
  • ????????byte[]?b=new?byte[1000]; ?
  • ????????int?len=0; ?
  • ????????try{ ?
  • ????????????len=this.input.read(b); ?
  • ????????}catch?(Exception?e)?{ ?
  • ????????????e.printStackTrace(); ?
  • ????????}try{ ?
  • ????????????input.close(); ?
  • ????????}catch?(Exception?e)?{ ?
  • ????????????e.printStackTrace(); ?
  • ????????} ?
  • ????????System.out.println("接受的內容為?"+(new?String(b,0,len))); ?
  • ????} ?
  • } ?
  • /** ?
  • ?*?測試類 ?
  • ?*?*/?
  • class?hello{ ?
  • ????public?static?void?main(String[]?args)?throws?IOException?{ ?
  • ????????Send?send=new?Send(); ?
  • ????????Recive?recive=new?Recive(); ?
  • ????????try{ ?
  • //管道連接 ?
  • ????????????send.getOut().connect(recive.getInput()); ?
  • ????????}catch?(Exception?e)?{ ?
  • ????????????e.printStackTrace(); ?
  • ????????} ?
  • ????????new?Thread(send).start(); ?
  • ????????new?Thread(recive).start(); ?
  • ????} ?
  • }?
  • 【運行結果】:
    ?

    接受的內容為 hello , Rollen

    打印流

  • /** ?
  • ?*?使用PrintStream進行輸出 ?
  • ?*?*/?
  • import?java.io.*; ?
  • ?
  • class?hello?{ ?
  • ????public?static?void?main(String[]?args)?throws?IOException?{ ?
  • ????????PrintStream?print?=?new?PrintStream(new?FileOutputStream(new?File("d:"?
  • ????????????????+?File.separator?+?"hello.txt"))); ?
  • ????????print.println(true); ?
  • ????????print.println("Rollen"); ?
  • ????????print.close(); ?
  • ????} ?
  • }?
  • 【運行結果】:

    true

    Rollen

    當然也可以格式化輸出

  • /** ?
  • ?*?使用PrintStream進行輸出 ?
  • ?*?并進行格式化 ?
  • ?*?*/?
  • import?java.io.*; ?
  • class?hello?{ ?
  • ????public?static?void?main(String[]?args)?throws?IOException?{ ?
  • ????????PrintStream?print?=?new?PrintStream(new?FileOutputStream(new?File("d:"?
  • ????????????????+?File.separator?+?"hello.txt"))); ?
  • ????????String?name="Rollen"; ?
  • ????????int?age=20; ?
  • ????????print.printf("姓名:%s.?年齡:%d.",name,age); ?
  • ????????print.close(); ?
  • ????} ?
  • }?
  • 【運行結果】:

    姓名:Rollen. 年齡:20.

    使用OutputStream向屏幕上輸出內容

  • /** ?
  • ?*?使用OutputStream向屏幕上輸出內容? ?
  • ?*?*/?
  • import?java.io.*; ?
  • class?hello?{ ?
  • ????public?static?void?main(String[]?args)?throws?IOException?{ ?
  • ????????OutputStream?out=System.out; ?
  • ????????try{ ?
  • ????????????out.write("hello".getBytes()); ?
  • ????????}catch?(Exception?e)?{ ?
  • ????????????e.printStackTrace(); ?
  • ????????} ?
  • ????????try{ ?
  • ????????????out.close(); ?
  • ????????}catch?(Exception?e)?{ ?
  • ????????????e.printStackTrace(); ?
  • ????????} ?
  • ????} ?
  • }?
  • 【運行結果】:

    hello

    輸入輸出重定向

  • import?java.io.File; ?
  • import?java.io.FileNotFoundException; ?
  • import?java.io.FileOutputStream; ?
  • import?java.io.PrintStream; ?
  • ?
  • /** ?
  • ?*?為System.out.println()重定向輸出 ?
  • ?*?*/?
  • public?class?systemDemo{ ?
  • ????public?static?void?main(String[]?args){ ?
  • ????????//?此刻直接輸出到屏幕 ?
  • ????????System.out.println("hello"); ?
  • ????????File?file?=?new?File("d:"?+?File.separator?+?"hello.txt"); ?
  • ????????try{ ?
  • ????????????System.setOut(new?PrintStream(new?FileOutputStream(file))); ?
  • ????????}catch(FileNotFoundException?e){ ?
  • ????????????e.printStackTrace(); ?
  • ????????} ?
  • ????????System.out.println("這些內容在文件中才能看到哦!"); ?
  • ????} ?
  • }?
  • 【運行結果】:

    eclipse的控制臺輸出的是hello。然后當我們查看d盤下面的hello.txt文件的時候,會在里面看到:這些內容在文件中才能看到哦!

  • import?java.io.File; ?
  • import?java.io.FileNotFoundException; ?
  • import?java.io.FileOutputStream; ?
  • import?java.io.PrintStream; ?
  • ?
  • /** ?
  • ?*?System.err重定向?這個例子也提示我們可以使用這種方法保存錯誤信息 ?
  • ?*?*/?
  • public?class?systemErr{ ?
  • ????public?static?void?main(String[]?args){ ?
  • ????????File?file?=?new?File("d:"?+?File.separator?+?"hello.txt"); ?
  • ????????System.err.println("這些在控制臺輸出"); ?
  • ????????try{ ?
  • ????????????System.setErr(new?PrintStream(new?FileOutputStream(file))); ?
  • ????????}catch(FileNotFoundException?e){ ?
  • ????????????e.printStackTrace(); ?
  • ????????} ?
  • ????????System.err.println("這些在文件中才能看到哦!"); ?
  • ????} ?
  • }?
  • 【運行結果】:

    你會在eclipse的控制臺看到紅色的輸出:“這些在控制臺輸出”,然后在d盤下面的hello.txt中會看到:這些在文件中才能看到哦!

  • import?java.io.File; ?
  • import?java.io.FileInputStream; ?
  • import?java.io.FileNotFoundException; ?
  • import?java.io.IOException; ?
  • ?
  • /** ?
  • ?*?System.in重定向 ?
  • ?*?*/?
  • public?class?systemIn{ ?
  • ????public?static?void?main(String[]?args){ ?
  • ????????File?file?=?new?File("d:"?+?File.separator?+?"hello.txt"); ?
  • ????????if(!file.exists()){ ?
  • ????????????return; ?
  • ????????}else{ ?
  • ????????????try{ ?
  • ????????????????System.setIn(new?FileInputStream(file)); ?
  • ????????????}catch(FileNotFoundException?e){ ?
  • ????????????????e.printStackTrace(); ?
  • ????????????} ?
  • ????????????byte[]?bytes?=?new?byte[1024]; ?
  • ????????????int?len?=?0; ?
  • ????????????try{ ?
  • ????????????????len?=?System.in.read(bytes); ?
  • ????????????}catch(IOException?e){ ?
  • ????????????????e.printStackTrace(); ?
  • ????????????} ?
  • ????????????System.out.println("讀入的內容為:"?+?new?String(bytes,?0,?len)); ?
  • ????????} ?
  • ????} ?
  • }?
  • 【運行結果】:

    前提是我的d盤下面的hello.txt中的內容是:“這些文件中的內容哦!”,然后運行程序,輸出的結果為:讀入的內容為:這些文件中的內容哦!

    BufferedReader的小例子

    注意: BufferedReader只能接受字符流的緩沖區(qū),因為每一個中文需要占據兩個字節(jié),所以需要將System.in這個字節(jié)輸入流變?yōu)樽址斎肓?#xff0c;采用:

  • BufferedReader?buf?=?new?BufferedReader( ?
  • ????????????????new?InputStreamReader(System.in));?
  • 下面給一個實例:

  • import?java.io.BufferedReader; ?
  • import?java.io.IOException; ?
  • import?java.io.InputStreamReader; ?
  • ?
  • /** ?
  • ?*?使用緩沖區(qū)從鍵盤上讀入內容 ?
  • ?*?*/?
  • public?class?BufferedReaderDemo{ ?
  • ????public?static?void?main(String[]?args){ ?
  • ????????BufferedReader?buf?=?new?BufferedReader( ?
  • ????????????????new?InputStreamReader(System.in)); ?
  • ????????String?str?=?null; ?
  • ????????System.out.println("請輸入內容"); ?
  • ????????try{ ?
  • ????????????str?=?buf.readLine(); ?
  • ????????}catch(IOException?e){ ?
  • ????????????e.printStackTrace(); ?
  • ????????} ?
  • ????????System.out.println("你輸入的內容是:"?+?str); ?
  • ????} ?
  • }?
  • 運行結果:

    請輸入內容

    dasdas

    你輸入的內容是:dasdas


    Scanner類

    其實我們比較常用的是采用Scanner類來進行數據輸入,下面來給一個Scanner的例子吧

  • import?java.util.Scanner; ?
  • ?
  • /** ?
  • ?*?Scanner的小例子,從鍵盤讀數據 ?
  • ?*?*/?
  • public?class?ScannerDemo{ ?
  • ????public?static?void?main(String[]?args){ ?
  • ????????Scanner?sca?=?new?Scanner(System.in); ?
  • ????????//?讀一個整數 ?
  • ????????int?temp?=?sca.nextInt(); ?
  • ????????System.out.println(temp); ?
  • ????????//讀取浮點數 ?
  • ????????float?flo=sca.nextFloat(); ?
  • ????????System.out.println(flo); ?
  • ????????//讀取字符 ?
  • ????????//...等等的,都是一些太基礎的,就不師范了。 ?
  • ????} ?
  • }?
  • 其實Scanner可以接受任何的輸入流

    下面給一個使用Scanner類從文件中讀出內容

  • import?java.io.File; ?
  • import?java.io.FileNotFoundException; ?
  • import?java.util.Scanner; ?
  • ?
  • /** ?
  • ?*?Scanner的小例子,從文件中讀內容 ?
  • ?*?*/?
  • public?class?ScannerDemo{ ?
  • ????public?static?void?main(String[]?args){ ?
  • ?
  • ????????File?file?=?new?File("d:"?+?File.separator?+?"hello.txt"); ?
  • ????????Scanner?sca?=?null; ?
  • ????????try{ ?
  • ????????????sca?=?new?Scanner(file); ?
  • ????????}catch(FileNotFoundException?e){ ?
  • ????????????e.printStackTrace(); ?
  • ????????} ?
  • ????????String?str?=?sca.next(); ?
  • ????????System.out.println("從文件中讀取的內容是:"?+?str); ?
  • ????} ?
  • }?
  • 【運行結果】:

    從文件中讀取的內容是:這些文件中的內容哦!

    數據操作流DataOutputStream、DataInputStream類

  • import?java.io.DataOutputStream; ?
  • import?java.io.File; ?
  • import?java.io.FileOutputStream; ?
  • import?java.io.IOException; ?
  • ?
  • public?class?DataOutputStreamDemo{ ?
  • ????public?static?void?main(String[]?args)?throws?IOException{ ?
  • ????????File?file?=?new?File("d:"?+?File.separator?+?"hello.txt"); ?
  • ????????char[]?ch?=?{?'A',?'B',?'C'?}; ?
  • ????????DataOutputStream?out?=?null; ?
  • ????????out?=?new?DataOutputStream(new?FileOutputStream(file)); ?
  • ????????for(char?temp?:?ch){ ?
  • ????????????out.writeChar(temp); ?
  • ????????} ?
  • ????????out.close(); ?
  • ????} ?
  • }?
  • A B C

    現在我們在上面例子的基礎上,使用DataInputStream讀出內容

  • import?java.io.DataInputStream; ?
  • import?java.io.File; ?
  • import?java.io.FileInputStream; ?
  • import?java.io.IOException; ?
  • ?
  • public?class?DataOutputStreamDemo{ ?
  • ????public?static?void?main(String[]?args)?throws?IOException{ ?
  • ????????File?file?=?new?File("d:"?+?File.separator?+?"hello.txt"); ?
  • ????????DataInputStream?input?=?new?DataInputStream(new?FileInputStream(file)); ?
  • ????????char[]?ch?=?new?char[10]; ?
  • ????????int?count?=?0; ?
  • ????????char?temp; ?
  • ????????while((temp?=?input.readChar())?!=?'C'){ ?
  • ????????????ch[count++]?=?temp; ?
  • ????????} ?
  • ????????System.out.println(ch); ?
  • ????} ?
  • }?
  • 【運行結果】:

    AB

    合并流 SequenceInputStream

    SequenceInputStream主要用來將2個流合并在一起,比如將兩個txt中的內容合并為另外一個txt。下面給出一個實例:

  • import?java.io.File; ?
  • import?java.io.FileInputStream; ?
  • import?java.io.FileOutputStream; ?
  • import?java.io.IOException; ?
  • import?java.io.InputStream; ?
  • import?java.io.OutputStream; ?
  • import?java.io.SequenceInputStream; ?
  • ?
  • /** ?
  • ?*?將兩個文本文件合并為另外一個文本文件 ?
  • ?*?*/?
  • public?class?SequenceInputStreamDemo{ ?
  • ????public?static?void?main(String[]?args)?throws?IOException{ ?
  • ????????File?file1?=?new?File("d:"?+?File.separator?+?"hello1.txt"); ?
  • ????????File?file2?=?new?File("d:"?+?File.separator?+?"hello2.txt"); ?
  • ????????File?file3?=?new?File("d:"?+?File.separator?+?"hello.txt"); ?
  • ????????InputStream?input1?=?new?FileInputStream(file1); ?
  • ????????InputStream?input2?=?new?FileInputStream(file2); ?
  • ????????OutputStream?output?=?new?FileOutputStream(file3); ?
  • ????????//?合并流 ?
  • ????????SequenceInputStream?sis?=?new?SequenceInputStream(input1,?input2); ?
  • ????????int?temp?=?0; ?
  • ????????while((temp?=?sis.read())?!=?-1){ ?
  • ????????????output.write(temp); ?
  • ????????} ?
  • ????????input1.close(); ?
  • ????????input2.close(); ?
  • ????????output.close(); ?
  • ????????sis.close(); ?
  • ????} ?
  • }?
  • 【運行結果】

    結果會在hello.txt文件中包含hello1.txt和hello2.txt文件中的內容。

    文件壓縮 ZipOutputStream類

    先舉一個壓縮單個文件的例子吧:

  • import?java.io.File; ?
  • import?java.io.FileInputStream; ?
  • import?java.io.FileOutputStream; ?
  • import?java.io.IOException; ?
  • import?java.io.InputStream; ?
  • import?java.util.zip.ZipEntry; ?
  • import?java.util.zip.ZipOutputStream; ?
  • ?
  • public?class?ZipOutputStreamDemo1{ ?
  • ????public?static?void?main(String[]?args)?throws?IOException{ ?
  • ????????File?file?=?new?File("d:"?+?File.separator?+?"hello.txt"); ?
  • ????????File?zipFile?=?new?File("d:"?+?File.separator?+?"hello.zip"); ?
  • ????????InputStream?input?=?new?FileInputStream(file); ?
  • ????????ZipOutputStream?zipOut?=?new?ZipOutputStream(new?FileOutputStream( ?
  • ????????????????zipFile)); ?
  • ????????zipOut.putNextEntry(new?ZipEntry(file.getName())); ?
  • ????????//?設置注釋 ?
  • ????????zipOut.setComment("hello"); ?
  • ????????int?temp?=?0; ?
  • ????????while((temp?=?input.read())?!=?-1){ ?
  • ????????????zipOut.write(temp); ?
  • ????????} ?
  • ????????input.close(); ?
  • ????????zipOut.close(); ?
  • ????} ?
  • }?
  • 【運行結果】

    運行結果之前,我創(chuàng)建了一個hello.txt的文件,原本大小56個字節(jié),但是壓縮之后產生hello.zip之后,居然變成了175個字節(jié),有點搞不懂。
    不過結果肯定是正確的,我只是提出我的一個疑問而已。

    上面的這個例子測試的是壓縮單個文件,下面的們來看看如何壓縮多個文件。

  • import?java.io.File; ?
  • import?java.io.FileInputStream; ?
  • import?java.io.FileOutputStream; ?
  • import?java.io.IOException; ?
  • import?java.io.InputStream; ?
  • import?java.util.zip.ZipEntry; ?
  • import?java.util.zip.ZipOutputStream; ?
  • ?
  • /** ?
  • ?*?一次性壓縮多個文件 ?
  • ?*?*/?
  • public?class?ZipOutputStreamDemo2{ ?
  • ????public?static?void?main(String[]?args)?throws?IOException{ ?
  • ????????//?要被壓縮的文件夾 ?
  • ????????File?file?=?new?File("d:"?+?File.separator?+?"temp"); ?
  • ????????File?zipFile?=?new?File("d:"?+?File.separator?+?"zipFile.zip"); ?
  • ????????InputStream?input?=?null; ?
  • ????????ZipOutputStream?zipOut?=?new?ZipOutputStream(new?FileOutputStream( ?
  • ????????????????zipFile)); ?
  • ????????zipOut.setComment("hello"); ?
  • ????????if(file.isDirectory()){ ?
  • ????????????File[]?files?=?file.listFiles(); ?
  • ????????????for(int?i?=?0;?i?<?files.length;?++i){ ?
  • ????????????????input?=?new?FileInputStream(files[i]); ?
  • ????????????????zipOut.putNextEntry(new?ZipEntry(file.getName() ?
  • ????????????????????????+?File.separator?+?files[i].getName())); ?
  • ????????????????int?temp?=?0; ?
  • ????????????????while((temp?=?input.read())?!=?-1){ ?
  • ????????????????????zipOut.write(temp); ?
  • ????????????????} ?
  • ????????????????input.close(); ?
  • ????????????} ?
  • ????????} ?
  • ????????zipOut.close(); ?
  • ????} ?
  • }?
  • 【運行結果】

    先看看要被壓縮的文件吧:

    接下來看看壓縮之后的:

    大家自然想到,既然能壓縮,自然能解壓縮,在談解壓縮之前,我們會用到一個ZipFile類,先給一個這個例子吧。java中的每一個壓縮文件都是可以使用ZipFile來進行表示的

  • import?java.io.File; ?
  • import?java.io.IOException; ?
  • import?java.util.zip.ZipFile; ?
  • ?
  • /** ?
  • ?*?ZipFile演示 ?
  • ?*?*/?
  • public?class?ZipFileDemo{ ?
  • ????public?static?void?main(String[]?args)?throws?IOException{ ?
  • ????????File?file?=?new?File("d:"?+?File.separator?+?"hello.zip"); ?
  • ????????ZipFile?zipFile?=?new?ZipFile(file); ?
  • ????????System.out.println("壓縮文件的名稱為:"?+?zipFile.getName()); ?
  • ????} ?
  • }?
  • 【運行結果】:

    壓縮文件的名稱為:d:\hello.zip

    現在我們呢是時候來看看如何加壓縮文件了,和之前一樣,先讓我們來解壓單個壓縮文件(也就是壓縮文件中只有一個文件的情況),我們采用前面的例子產生的壓縮文件hello.zip

  • import?java.io.File; ?
  • import?java.io.FileOutputStream; ?
  • import?java.io.IOException; ?
  • import?java.io.InputStream; ?
  • import?java.io.OutputStream; ?
  • import?java.util.zip.ZipEntry; ?
  • import?java.util.zip.ZipFile; ?
  • ?
  • /** ?
  • ?*?解壓縮文件(壓縮文件中只有一個文件的情況) ?
  • ?*?*/?
  • public?class?ZipFileDemo2{ ?
  • ????public?static?void?main(String[]?args)?throws?IOException{ ?
  • ????????File?file?=?new?File("d:"?+?File.separator?+?"hello.zip"); ?
  • ????????File?outFile?=?new?File("d:"?+?File.separator?+?"unZipFile.txt"); ?
  • ????????ZipFile?zipFile?=?new?ZipFile(file); ?
  • ????????ZipEntry?entry?=?zipFile.getEntry("hello.txt"); ?
  • ????????InputStream?input?=?zipFile.getInputStream(entry); ?
  • ????????OutputStream?output?=?new?FileOutputStream(outFile); ?
  • ????????int?temp?=?0; ?
  • ????????while((temp?=?input.read())?!=?-1){ ?
  • ????????????output.write(temp); ?
  • ????????} ?
  • ????????input.close(); ?
  • ????????output.close(); ?
  • ????} ?
  • }?
  • 【運行結果】:
    解壓縮之前:

    這個壓縮文件還是175字節(jié)
    解壓之后產生:

    又回到了56字節(jié),表示郁悶。

    現在讓我們來解壓一個壓縮文件中包含多個文件的情況吧
    ZipInputStream類

    當我們需要解壓縮多個文件的時候,ZipEntry就無法使用了,如果想操作更加復雜的壓縮文件,我們就必須使用ZipInputStream類

  • import?java.io.File; ?
  • import?java.io.FileInputStream; ?
  • import?java.io.FileOutputStream; ?
  • import?java.io.IOException; ?
  • import?java.io.InputStream; ?
  • import?java.io.OutputStream; ?
  • import?java.util.zip.ZipEntry; ?
  • import?java.util.zip.ZipFile; ?
  • import?java.util.zip.ZipInputStream; ?
  • ?
  • /** ?
  • ?*?解壓縮一個壓縮文件中包含多個文件的情況 ?
  • ?*?*/?
  • public?class?ZipFileDemo3{ ?
  • ????public?static?void?main(String[]?args)?throws?IOException{ ?
  • ????????File?file?=?new?File("d:"?+?File.separator?+?"zipFile.zip"); ?
  • ????????File?outFile?=?null; ?
  • ????????ZipFile?zipFile?=?new?ZipFile(file); ?
  • ????????ZipInputStream?zipInput?=?new?ZipInputStream(new?FileInputStream(file)); ?
  • ????????ZipEntry?entry?=?null; ?
  • ????????InputStream?input?=?null; ?
  • ????????OutputStream?output?=?null; ?
  • ????????while((entry?=?zipInput.getNextEntry())?!=?null){ ?
  • ????????????System.out.println("解壓縮"?+?entry.getName()?+?"文件"); ?
  • ????????????outFile?=?new?File("d:"?+?File.separator?+?entry.getName()); ?
  • ????????????if(!outFile.getParentFile().exists()){ ?
  • ????????????????outFile.getParentFile().mkdir(); ?
  • ????????????} ?
  • ????????????if(!outFile.exists()){ ?
  • ????????????????outFile.createNewFile(); ?
  • ????????????} ?
  • ????????????input?=?zipFile.getInputStream(entry); ?
  • ????????????output?=?new?FileOutputStream(outFile); ?
  • ????????????int?temp?=?0; ?
  • ????????????while((temp?=?input.read())?!=?-1){ ?
  • ????????????????output.write(temp); ?
  • ????????????} ?
  • ????????????input.close(); ?
  • ????????????output.close(); ?
  • ????????} ?
  • ????} ?
  • }?
  • 【運行結果】:
    被解壓的文件:

    解壓之后再D盤下會出現一個temp文件夾,里面內容:

    PushBackInputStream回退流

  • import?java.io.ByteArrayInputStream; ?
  • import?java.io.IOException; ?
  • import?java.io.PushbackInputStream; ?
  • ?
  • /** ?
  • ?*?回退流操作 ?
  • ?*?*/?
  • public?class?PushBackInputStreamDemo{ ?
  • ????public?static?void?main(String[]?args)?throws?IOException{ ?
  • ????????String?str?=?"hello,rollenholt"; ?
  • ????????PushbackInputStream?push?=?null; ?
  • ????????ByteArrayInputStream?bat?=?null; ?
  • ????????bat?=?new?ByteArrayInputStream(str.getBytes()); ?
  • ????????push?=?new?PushbackInputStream(bat); ?
  • ????????int?temp?=?0; ?
  • ????????while((temp?=?push.read())?!=?-1){ ?
  • ????????????if(temp?==?','){ ?
  • ????????????????push.unread(temp); ?
  • ????????????????temp?=?push.read(); ?
  • ????????????????System.out.print("(回退"?+?(char)?temp?+?")?"); ?
  • ????????????}else{ ?
  • ????????????????System.out.print((char)?temp); ?
  • ????????????} ?
  • ????????} ?
  • ????} ?
  • }?
  • 【運行結果】:
    hello(回退,) rollenholt

  • /** ?
  • ?*?取得本地的默認編碼 ?
  • ?*?*/?
  • public?class?CharSetDemo{ ?
  • ????public?static?void?main(String[]?args){ ?
  • ????????System.out.println("系統(tǒng)默認編碼為:"?+?System.getProperty("file.encoding")); ?
  • ????} ?
  • }?
  • 【運行結果】:

    系統(tǒng)默認編碼為:GBK

    亂碼的產生:

  • import?java.io.File; ?
  • import?java.io.FileOutputStream; ?
  • import?java.io.IOException; ?
  • import?java.io.OutputStream; ?
  • ?
  • /** ?
  • ?*?亂碼的產生 ?
  • ?*?*/?
  • public?class?CharSetDemo2{ ?
  • ????public?static?void?main(String[]?args)?throws?IOException{ ?
  • ????????File?file?=?new?File("d:"?+?File.separator?+?"hello.txt"); ?
  • ????????OutputStream?out?=?new?FileOutputStream(file); ?
  • ????????byte[]?bytes?=?"你好".getBytes("ISO8859-1"); ?
  • ????????out.write(bytes); ?
  • ????????out.close(); ?
  • ????} ?
  • }?
  • 【運行結果】:

    ??

    一般情況下產生亂碼,都是由于編碼不一致的問題。



    對象的序列化

    對象序列化就是把一個對象變?yōu)槎M制數據流的一種方法。

    一個類要想被序列化,就行必須實現java.io.Serializable接口。雖然這個接口中沒有任何方法,就如同之前的cloneable接口一樣。實現了這個接口之后,就表示這個類具有被序列化的能力。

    先讓我們實現一個具有序列化能力的類吧:

  • import?java.io.*; ?
  • /** ?
  • ?*?實現具有序列化能力的類 ?
  • ?*?*/?
  • public?class?SerializableDemo?implements?Serializable{ ?
  • ????public?SerializableDemo(){ ?
  • ???????? ?
  • ????} ?
  • ????public?SerializableDemo(String?name,?int?age){ ?
  • ????????this.name=name; ?
  • ????????this.age=age; ?
  • ????} ?
  • ????@Override?
  • ????public?String?toString(){ ?
  • ????????return?"姓名:"+name+"??年齡:"+age; ?
  • ????} ?
  • ????private?String?name; ?
  • ????private?int?age; ?
  • }?
  • 這個類就具有實現序列化能力,

    在繼續(xù)將序列化之前,先將一下ObjectInputStream和ObjectOutputStream這兩個類

    先給一個ObjectOutputStream的例子吧:

  • import?java.io.Serializable; ?
  • import?java.io.File; ?
  • import?java.io.FileOutputStream; ?
  • import?java.io.IOException; ?
  • import?java.io.ObjectOutputStream; ?
  • ?
  • /** ?
  • ?*?實現具有序列化能力的類 ?
  • ?*?*/?
  • public?class?Person?implements?Serializable{ ?
  • ????public?Person(){ ?
  • ?
  • ????} ?
  • ?
  • ????public?Person(String?name,?int?age){ ?
  • ????????this.name?=?name; ?
  • ????????this.age?=?age; ?
  • ????} ?
  • ?
  • ????@Override?
  • ????public?String?toString(){ ?
  • ????????return?"姓名:"?+?name?+?"??年齡:"?+?age; ?
  • ????} ?
  • ?
  • ????private?String?name; ?
  • ????private?int?age; ?
  • } ?
  • /** ?
  • ?*?示范ObjectOutputStream ?
  • ?*?*/?
  • public?class?ObjectOutputStreamDemo{ ?
  • ????public?static?void?main(String[]?args)?throws?IOException{ ?
  • ????????File?file?=?new?File("d:"?+?File.separator?+?"hello.txt"); ?
  • ????????ObjectOutputStream?oos?=?new?ObjectOutputStream(new?FileOutputStream( ?
  • ????????????????file)); ?
  • ????????oos.writeObject(new?Person("rollen",?20)); ?
  • ????????oos.close(); ?
  • ????} ?
  • }?
  • 【運行結果】:

    當我們查看產生的hello.txt的時候,看到的是亂碼,呵呵。因為是二進制文件。

    雖然我們不能直接查看里面的內容,但是我們可以使用ObjectInputStream類查看:

  • import?java.io.File; ?
  • import?java.io.FileInputStream; ?
  • import?java.io.ObjectInputStream; ?
  • ?
  • /** ?
  • ?*?ObjectInputStream示范 ?
  • ?*?*/?
  • public?class?ObjectInputStreamDemo{ ?
  • ????public?static?void?main(String[]?args)?throws?Exception{ ?
  • ????????File?file?=?new?File("d:"?+?File.separator?+?"hello.txt"); ?
  • ????????ObjectInputStream?input?=?new?ObjectInputStream(new?FileInputStream( ?
  • ????????????????file)); ?
  • ????????Object?obj?=?input.readObject(); ?
  • ????????input.close(); ?
  • ????????System.out.println(obj); ?
  • ????} ?
  • }?
  • 【運行結果】

    姓名:rollen 年齡:20

    到底序列化什么內容呢?

    其實只有屬性會被序列化。

    Externalizable接口

    被Serializable接口聲明的類的對象的屬性都將被序列化,但是如果想自定義序列化的內容的時候,就需要實現Externalizable接口。

    當一個類要使用Externalizable這個接口的時候,這個類中必須要有一個無參的構造函數,如果沒有的話,在構造的時候會產生異常,這是因為在反序列話的時候會默認調用無參的構造函數。

    現在我們來演示一下序列化和反序列話:

  • package?IO; ?
  • ?
  • import?java.io.Externalizable; ?
  • import?java.io.File; ?
  • import?java.io.FileInputStream; ?
  • import?java.io.FileOutputStream; ?
  • import?java.io.IOException; ?
  • import?java.io.ObjectInput; ?
  • import?java.io.ObjectInputStream; ?
  • import?java.io.ObjectOutput; ?
  • import?java.io.ObjectOutputStream; ?
  • ?
  • /** ?
  • ?*?序列化和反序列化的操作 ?
  • ?*?*/?
  • public?class?ExternalizableDemo{ ?
  • ????public?static?void?main(String[]?args)?throws?Exception{ ?
  • ????????ser();?//?序列化 ?
  • ????????dser();?//?反序列話 ?
  • ????} ?
  • ?
  • ????public?static?void?ser()?throws?Exception{ ?
  • ????????File?file?=?new?File("d:"?+?File.separator?+?"hello.txt"); ?
  • ????????ObjectOutputStream?out?=?new?ObjectOutputStream(new?FileOutputStream( ?
  • ????????????????file)); ?
  • ????????out.writeObject(new?Person("rollen",?20)); ?
  • ????????out.close(); ?
  • ????} ?
  • ?
  • ????public?static?void?dser()?throws?Exception{ ?
  • ????????File?file?=?new?File("d:"?+?File.separator?+?"hello.txt"); ?
  • ????????ObjectInputStream?input?=?new?ObjectInputStream(new?FileInputStream( ?
  • ????????????????file)); ?
  • ????????Object?obj?=?input.readObject(); ?
  • ????????input.close(); ?
  • ????????System.out.println(obj); ?
  • ????} ?
  • } ?
  • ?
  • class?Person?implements?Externalizable{ ?
  • ????public?Person(){ ?
  • ?
  • ????} ?
  • ?
  • ????public?Person(String?name,?int?age){ ?
  • ????????this.name?=?name; ?
  • ????????this.age?=?age; ?
  • ????} ?
  • ?
  • ????@Override?
  • ????public?String?toString(){ ?
  • ????????return?"姓名:"?+?name?+?"??年齡:"?+?age; ?
  • ????} ?
  • ?
  • ????//?復寫這個方法,根據需要可以保存的屬性或者具體內容,在序列化的時候使用 ?
  • ????@Override?
  • ????public?void?writeExternal(ObjectOutput?out)?throws?IOException{ ?
  • ????????out.writeObject(this.name); ?
  • ????????out.writeInt(age); ?
  • ????} ?
  • ?
  • ????//?復寫這個方法,根據需要讀取內容?反序列話的時候需要 ?
  • ????@Override?
  • ????public?void?readExternal(ObjectInput?in)?throws?IOException, ?
  • ????????????ClassNotFoundException{ ?
  • ????????this.name?=?(String)?in.readObject(); ?
  • ????????this.age?=?in.readInt(); ?
  • ????} ?
  • ?
  • ????private?String?name; ?
  • ????private?int?age; ?
  • }?
  • 【運行結果】:

    姓名:rollen 年齡:20

    本例中,我們將全部的屬性都保留了下來,

    Serializable接口實現的操作其實是吧一個對象中的全部屬性進行序列化,當然也可以使用我們上使用是Externalizable接口以實現部分屬性的序列化,但是這樣的操作比較麻煩,

    當我們使用Serializable接口實現序列化操作的時候,如果一個對象的某一個屬性不想被序列化保存下來,那么我們可以使用transient關鍵字進行說明:

    下面舉一個例子:

  • package?IO; ?
  • ?
  • import?java.io.File; ?
  • import?java.io.FileInputStream; ?
  • import?java.io.FileOutputStream; ?
  • import?java.io.ObjectInputStream; ?
  • import?java.io.ObjectOutputStream; ?
  • import?java.io.Serializable; ?
  • ?
  • /** ?
  • ?*?序列化和反序列化的操作 ?
  • ?*?*/?
  • public?class?serDemo{ ?
  • ????public?static?void?main(String[]?args)?throws?Exception{ ?
  • ????????ser();?//?序列化 ?
  • ????????dser();?//?反序列話 ?
  • ????} ?
  • ?
  • ????public?static?void?ser()?throws?Exception{ ?
  • ????????File?file?=?new?File("d:"?+?File.separator?+?"hello.txt"); ?
  • ????????ObjectOutputStream?out?=?new?ObjectOutputStream(new?FileOutputStream( ?
  • ????????????????file)); ?
  • ????????out.writeObject(new?Person1("rollen",?20)); ?
  • ????????out.close(); ?
  • ????} ?
  • ?
  • ????public?static?void?dser()?throws?Exception{ ?
  • ????????File?file?=?new?File("d:"?+?File.separator?+?"hello.txt"); ?
  • ????????ObjectInputStream?input?=?new?ObjectInputStream(new?FileInputStream( ?
  • ????????????????file)); ?
  • ????????Object?obj?=?input.readObject(); ?
  • ????????input.close(); ?
  • ????????System.out.println(obj); ?
  • ????} ?
  • } ?
  • ?
  • class?Person1?implements?Serializable{ ?
  • ????public?Person1(){ ?
  • ?
  • ????} ?
  • ?
  • ????public?Person1(String?name,?int?age){ ?
  • ????????this.name?=?name; ?
  • ????????this.age?=?age; ?
  • ????} ?
  • ?
  • ????@Override?
  • ????public?String?toString(){ ?
  • ????????return?"姓名:"?+?name?+?"??年齡:"?+?age; ?
  • ????} ?
  • ?
  • ????//?注意這里 ?
  • ????private?transient?String?name; ?
  • ????private?int?age; ?
  • }?
  • 【運行結果】:

    姓名:null 年齡:20

    最后在給一個序列化一組對象的例子吧:

  • import?java.io.File; ?
  • import?java.io.FileInputStream; ?
  • import?java.io.FileOutputStream; ?
  • import?java.io.ObjectInputStream; ?
  • import?java.io.ObjectOutputStream; ?
  • import?java.io.Serializable; ?
  • ?
  • /** ?
  • ?*?序列化一組對象 ?
  • ?*?*/?
  • public?class?SerDemo1{ ?
  • ????public?static?void?main(String[]?args)?throws?Exception{ ?
  • ????????Student[]?stu?=?{?new?Student("hello",?20),?new?Student("world",?30), ?
  • ????????????????new?Student("rollen",?40)?}; ?
  • ????????ser(stu); ?
  • ????????Object[]?obj?=?dser(); ?
  • ????????for(int?i?=?0;?i?<?obj.length;?++i){ ?
  • ????????????Student?s?=?(Student)?obj[i]; ?
  • ????????????System.out.println(s); ?
  • ????????} ?
  • ????} ?
  • ?
  • ????//?序列化 ?
  • ????public?static?void?ser(Object[]?obj)?throws?Exception{ ?
  • ????????File?file?=?new?File("d:"?+?File.separator?+?"hello.txt"); ?
  • ????????ObjectOutputStream?out?=?new?ObjectOutputStream(new?FileOutputStream( ?
  • ????????????????file)); ?
  • ????????out.writeObject(obj); ?
  • ????????out.close(); ?
  • ????} ?
  • ?
  • ????//?反序列化 ?
  • ????public?static?Object[]?dser()?throws?Exception{ ?
  • ????????File?file?=?new?File("d:"?+?File.separator?+?"hello.txt"); ?
  • ????????ObjectInputStream?input?=?new?ObjectInputStream(new?FileInputStream( ?
  • ????????????????file)); ?
  • ????????Object[]?obj?=?(Object[])?input.readObject(); ?
  • ????????input.close(); ?
  • ????????return?obj; ?
  • ????} ?
  • } ?
  • ?
  • class?Student?implements?Serializable{ ?
  • ????public?Student(){ ?
  • ?
  • ????} ?
  • ?
  • ????public?Student(String?name,?int?age){ ?
  • ????????this.name?=?name; ?
  • ????????this.age?=?age; ?
  • ????} ?
  • ?
  • ????@Override?
  • ????public?String?toString(){ ?
  • ????????return?"姓名:??"?+?name?+?"??年齡:"?+?age; ?
  • ????} ?
  • ?
  • ????private?String?name; ?
  • ????private?int?age; ?
  • }?
  • 【運行結果】:

    姓名: hello 年齡:20

    姓名: world 年齡:30

    姓名: rollen 年齡:40

    原文:http://www.cnblogs.com/rollenholt/archive/2011/09/11/2173787.html

    轉載于:https://www.cnblogs.com/firecode/archive/2012/02/28/2460891.html

    總結

    以上是生活随笔為你收集整理的Java中的IO整理完整版的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    992tv又爽又黄的免费视频 | 免费在线一区二区 | 中文字幕第一页在线播放 | 日日躁你夜夜躁你av蜜 | 成人免费一区二区三区在线观看 | 久99热| 国内精品视频一区二区三区八戒 | 伊人av综合| 亚洲一区 影院 | 亚洲视屏一区 | av免费观看网址 | 日韩中文在线播放 | 亚洲3级 | 久久亚洲私人国产精品va | 欧美精品一区二区免费 | 波多野结衣在线中文字幕 | 成人一级电影在线观看 | 三级av在线 | 五月婷婷天堂 | 久久你懂得| 成人免费视频免费观看 | 国产97视频 | 亚洲一级电影在线观看 | av在线之家电影网站 | 丁香 久久 综合 | 激情综合国产 | 天天操天天干天天爽 | 天天操天天干天天玩 | 久久精品亚洲综合专区 | 午夜精品久久久久久久99水蜜桃 | 天天干视频在线 | 国产黄色精品在线 | 天天爽天天爽天天爽 | 有码视频在线观看 | 精品久久一二三区 | 中文字幕在线视频第一页 | 日本在线观看黄色 | 少妇搡bbbb搡bbb搡69 | 日韩欧美69 | 在线91av| 91久久精品一区二区三区 | 精品福利在线视频 | 波多野结衣在线观看一区二区三区 | 亚洲精品免费在线视频 | 国产 日韩 中文字幕 | 激情 一区二区 | 在线免费黄色片 | 黄色电影在线免费观看 | www天天干 | 黄a网站| 中国成人一区 | 三级黄色免费片 | 九九热精品国产 | 国产精品丝袜久久久久久久不卡 | www.com.黄 | 久久久久久久久久久精 | 天天操天天添天天吹 | av综合 日韩 | 天天操夜夜叫 | 精品国产99 | 亚洲精品国偷拍自产在线观看蜜桃 | 久久久久久久久久久久久久av | 九九免费精品视频在线观看 | 黄色软件视频大全免费下载 | 欧美午夜久久久 | h视频在线看 | 一区二区欧美日韩 | 蜜桃av综合网 | 国产二区av| 国产不卡在线观看视频 | 精品色综合| 日韩电影在线看 | 亚洲精品免费看 | 黄色毛片观看 | 欧美日韩在线电影 | av黄色亚洲 | 美女视频黄网站 | 91桃色视频 | 亚洲最大成人免费网站 | 午夜婷婷在线播放 | 久久久久影视 | 国产成人一区在线 | 69视频永久免费观看 | 亚洲国产精品999 | 中文字幕免费久久 | 97影视| 成人免费视频免费观看 | 丁香六月综合网 | 国产黄色播放 | 色中射 | 四虎在线影视 | 激情视频亚洲 | 国产精品伦一区二区三区视频 | 久久婷婷影视 | 免费观看成年人视频 | 91成人看片| 91精品国自产拍天天拍 | 欧美狠狠色 | 黄色成人av在线 | 亚洲一级二级 | 欧美韩日视频 | 六月婷色| 最新精品视频在线 | 这里只有精品视频在线 | 91精品久久久久久久91蜜桃 | 日日夜夜天天综合 | 欧美日韩国产在线一区 | 久久99国产一区二区三区 | 91激情 | 最近最新最好看中文视频 | 天天射天天艹 | 在线观看中文字幕dvd播放 | 午夜av免费观看 | 免费成人av在线 | 久久综合久久综合这里只有精品 | 在线观看国产v片 | 久久综合婷婷 | 在线看福利av| 五月婷综合 | 日韩午夜小视频 | 在线99| 日本久久片 | 九九三级毛片 | 涩涩伊人| 视频福利在线观看 | 欧美视频18| 97超碰成人在线 | 一区二区三区四区五区在线 | 最新av在线播放 | 久草资源在线 | 中文字幕精品一区二区三区电影 | 久久久精品久久日韩一区综合 | 天天干天天射天天插 | 久久成人麻豆午夜电影 | 久久久免费少妇 | 在线观看成人av | 美女久久久久久 | 亚洲 在线 | 久久久久电影 | 久草视频在线看 | 99久热在线精品视频 | 黄色精品国产 | 久久免费在线观看 | 欧美aa一级| 亚洲精品国产综合久久 | 国产成人精品三级 | 国产精品高潮在线观看 | 黄色特一级 | 射射射av | 中文在线a在线 | 人人爱人人做人人爽 | 亚洲欧美国产精品久久久久 | 亚洲欧美日韩国产一区二区三区 | 97国产精品| 国产美女主播精品一区二区三区 | 久久精品视频4 | 欧美另类亚洲 | 在线看毛片网站 | 最近日本中文字幕a | av怡红院| 夜夜澡人模人人添人人看 | 久久免费精品一区二区三区 | 麻豆 91 在线 | 久热免费 | 天天操天天色天天 | 青青河边草免费直播 | 开心激情婷婷 | 97超碰在线免费观看 | 色中色亚洲 | 久久国产电影 | 午夜精品一区二区三区四区 | 日韩免费视频 | 最近中文字幕视频完整版 | 日本在线观看中文字幕无线观看 | 国产伦理久久精品久久久久_ | 最近日本韩国中文字幕 | 婷婷深爱| 黄色日本免费 | 91精品在线视频 | 在线亚洲高清视频 | 精品国产一区二区三区男人吃奶 | 久久亚洲综合国产精品99麻豆的功能介绍 | 99国产一区二区三精品乱码 | 免费91麻豆精品国产自产在线观看 | 久久久国产一区二区三区四区小说 | 在线视频手机国产 | 国产一级淫片免费看 | 中文字幕乱码视频 | 久久国产经典 | 青青草国产精品视频 | 2021国产精品 | 96av视频 | 天天精品视频 | 久久综合九色综合欧美狠狠 | 欧美精品乱码99久久影院 | 亚洲永久精品在线 | 午夜久久久久久久久 | 久要激情网 | 亚洲视频在线观看网站 | 久久精品一二三区白丝高潮 | 亚洲一级电影视频 | 伊人亚洲综合网 | 久久精品理论 | 综合色天天| 国产中文伊人 | 欧美精品v国产精品 | 99热只有精品在线观看 | 尤物九九久久国产精品的分类 | 91伊人久久大香线蕉蜜芽人口 | 欧美成人在线免费 | 青青草国产成人99久久 | 欧美一性一交一乱 | 欧美日韩在线电影 | 午夜黄色一级片 | 国产精品一区二区在线免费观看 | 五月开心六月伊人色婷婷 | 96亚洲精品久久 | 久久精品这里热有精品 | 日韩av有码在线 | 高清一区二区三区 | 麻豆视频免费在线观看 | 亚洲三区在线 | 五月激情综合婷婷 | 国产精品第三页 | 色播五月激情五月 | 久久精品视频网址 | 国产成人精品不卡 | 国产精品手机播放 | 中文字幕免费不卡视频 | 日韩av不卡播放 | 韩国在线一区二区 | 99久久精品免费看国产一区二区三区 | 91精品国产高清自在线观看 | 婷婷色在线播放 | 99久久久国产精品免费99 | 亚洲日本欧美在线 | 精品视频中文字幕 | 国产一区二区视频在线 | 国产这里只有精品 | 91亚色视频 | 91麻豆精品国产91久久久无限制版 | 四虎免费在线观看视频 | 最近中文字幕免费av | 91免费视频网站在线观看 | 97高清视频| 一区三区视频在线观看 | 天天爽天天摸 | 中文字幕91视频 | 亚洲人成人在线 | www.神马久久 | 亚洲精品在线观看视频 | 亚洲精品资源在线 | 国产中文字幕一区二区三区 | 国产精华国产精品 | 黄色片免费在线 | 99精彩视频在线观看免费 | 国产精品一区二区久久精品 | 91在线观看黄 | 久久综合日| 成人在线视频免费看 | 97超视频 | 欧美日韩国内在线 | 91在线资源 | 在线国产视频观看 | 欧美激情片在线观看 | 色婷婷av国产精品 | 九九热久久免费视频 | 欧美激情精品久久久久 | 在线黄色av电影 | 免费福利视频网站 | 亚洲一二三区精品 | 天天干天天操天天爱 | 国产黄a三级三级 | 六月激情婷婷 | 久久精品国产亚洲aⅴ | 亚洲欧美视频网站 | 久久一区二区免费视频 | 欧美日韩久久不卡 | 黄色一级大片在线免费看产 | 国产精品国产自产拍高清av | 久草电影在线观看 | 久久99精品国产一区二区三区 | 日韩性片| 婷婷激情5月天 | 欧美韩国在线 | 免费h漫在线观看 | 91资源在线播放 | 久久这里只精品 | 久久激情片 | 99色 | 97视频在线观看成人 | 丁香九月婷婷综合 | 精品亚洲一区二区三区 | 久久永久免费视频 | 国产日韩在线观看一区 | 韩日精品在线 | 成人精品福利 | 欧美久久久 | 日韩av综合网站 | 九色精品 | 亚洲少妇久久 | 成人久久久久久久久久 | 男女啪啪网站 | 久久成人久久 | 亚洲精品视频在线免费 | 色偷偷88欧美精品久久久 | 人人干人人超 | 亚洲日韩精品欧美一区二区 | 中文乱码视频在线观看 | 国产美女视频一区 | 久久 一区| 99视频一区 | 国产成人精品一区二区三区福利 | 国产电影一区二区三区四区 | 99九九99九九九视频精品 | 激情婷婷欧美 | 亚洲视频精选 | 欧美激情综合色 | 毛片永久新网址首页 | 久久久久成人精品 | 国产网红在线观看 | 最新黄色av网址 | 精品国产免费人成在线观看 | 在线观看视频在线观看 | 国产精品黄色 | 日本高清xxxx | 99久久久久免费精品国产 | 五月天婷婷在线观看视频 | 中文字幕国产一区二区 | 黄色一二级片 | 国产欧美精品一区二区三区 | 天天曰天天爽 | 九九热视频在线免费观看 | 国产精品嫩草在线 | 激情网综合 | 蜜臀久久99精品久久久无需会员 | 亚洲极色| 手机看片福利 | 国产日韩中文字幕 | 日韩国产欧美视频 | 亚洲国产中文字幕在线视频综合 | 97av免费视频| 国产婷婷视频在线 | 日本韩国欧美在线观看 | 国产亚洲精品无 | 高清av网 | 最近能播放的中文字幕 | 国产精品a久久久久 | 日韩免费在线观看 | 欧美激情视频在线观看免费 | 久草在线播放视频 | 婷婷久草| 91成人看片 | 在线国产中文字幕 | 欧美精品久久久久久久久久 | 少妇性色午夜淫片aaaze | 天天av资源 | 黄色a一级片 | 韩国av免费看 | 五月天高清欧美mv | 欧美在线视频一区二区三区 | 亚洲国产午夜视频 | 92中文资源在线 | 亚洲免费黄色 | 色香蕉在线 | 中国一级片在线播放 | 日韩中文在线字幕 | 精品国模一区二区三区 | 精品国产精品一区二区夜夜嗨 | 亚洲天堂视频在线 | 五月天视频网站 | 久久天天躁狠狠躁夜夜不卡公司 | 夜夜婷婷 | 中文资源在线观看 | 天天操夜夜拍 | 中文亚洲欧美日韩 | 国产精品久久99 | 九九热精品视频在线播放 | 亚洲激情在线观看 | 人人看人人草 | 国产男女免费完整视频 | 国产精品 日本 | 国产亚洲精品久久久久久电影 | 日韩欧美一区二区不卡 | 国产成人精品综合久久久久99 | 国产又粗又猛又黄又爽 | 视频在线观看日韩 | 久久婷婷色综合 | 色噜噜噜噜 | 女人18片 | 国产91精品久久久久 | 亚洲精品日韩在线观看 | 四虎在线视频免费观看 | 狠狠色狠狠色综合日日92 | 国产精品一区二区久久国产 | 亚洲成a人片在线观看网站口工 | 天天色天天爱天天射综合 | 日韩免费观看一区二区 | 久久精品视频免费 | 99999精品 | 国产精品久久久久久久午夜片 | 狠狠久久综合 | 五月婷婷激情综合网 | 91在线精品一区二区 | 日韩中文字幕在线不卡 | 亚洲婷婷在线视频 | 超碰在线人人97 | 欧美aa一级 | 日韩a级免费视频 | 中文字幕中文字幕在线中文字幕三区 | 天天操天天能 | 日韩在线视频线视频免费网站 | 欧产日产国产69 | 国产精品久久久久久一区二区 | 国产精品黑丝在线观看 | 国产精品99久久免费黑人 | 欧美粗又大 | 国产成人久久久久 | 久久久久久电影 | 91在线文字幕 | 亚洲精品乱码久久久一二三 | 亚洲成人网av | 天天射天天添 | 日韩久久精品一区二区三区 | 日韩一区二区三区免费电影 | 欧美一级淫片videoshd | 国产大片免费久久 | 精品国产欧美一区二区 | 日本在线视频网址 | 日韩免费观看高清 | 久久久久国产一区二区 | 中文字幕免费国产精品 | 97人人添人澡人人爽超碰动图 | 黄色av观看 | 午夜18视频在线观看 | 日韩成人av在线 | 亚洲无吗视频在线 | 综合在线观看色 | 一区二区三区 中文字幕 | 91精品国产网站 | 久操免费视频 | 日韩精品一区二区在线观看视频 | 公与妇乱理三级xxx 在线观看视频在线观看 | 日韩一级成人av | 天天干天天做 | 在线观看a视频 | a级片网站| 欧美激情va永久在线播放 | 久草综合在线观看 | 色之综合网 | 天天av天天 | 91精品国产自产在线观看永久 | 日本韩国欧美在线观看 | 国产精品麻豆免费版 | 成人av在线直播 | 91在线视频免费观看 | 正在播放日韩 | 亚洲在线网址 | 成人av免费在线看 | 欧美视频日韩视频 | 亚洲精品国偷拍自产在线观看蜜桃 | 综合激情伊人 | 色综合狠狠干 | 中文字幕在线免费播放 | 超碰97人 | 久久国产精品一区二区 | 免费污片 | 99久热在线精品视频成人一区 | 国产不卡高清 | 天天色天天 | 欧美天天综合 | 亚洲精品美女久久久 | 久久久一本精品99久久精品 | 国产精品资源在线 | 一区二区三区四区在线免费观看 | av看片网 | 97超碰人人干 | 日日精品 | 婷婷色中文网 | 中文字幕人成人 | 成人免费一级 | 狠狠狠干 | 欧美日本啪啪无遮挡网站 | 黄色片视频在线观看 | 久久久影院官网 | 色婷婷骚婷婷 | 欧美精品免费在线观看 | 99理论片 | 成人国产精品免费观看 | 久久成人国产精品一区二区 | 免费看的黄网站软件 | 国产在线观看高清视频 | 亚洲综合国产精品 | 嫩嫩影院理论片 | 六月丁香婷婷久久 | 在线观看视频免费播放 | 午夜久久久精品 | 日韩视频 一区 | 天天干,天天草 | 日韩在线小视频 | 国产精品资源在线 | 午夜资源站 | 日p在线观看 | av中文字幕av | 日韩精品一区二区电影 | va视频在线观看 | 国产中文 | 日本护士撒尿xxxx18 | 欧美在线视频一区二区三区 | av中文字幕在线免费观看 | 夜夜爽www| 国产午夜精品一区二区三区嫩草 | 国产一区二区三区 在线 | 91精品国产99久久久久 | 成人在线视频免费看 | 91久久国产露脸精品国产闺蜜 | 日三级在线 | 国产伦精品一区二区三区在线 | 91精品国产91久久久久 | 久久国产精品久久国产精品 | 麻豆一区二区 | 夜夜操天天 | 亚洲视频播放 | 免费看片在线观看 | www九九热| 欧美综合色在线图区 | 精品视频在线视频 | 一区二区三区在线观看 | 欧洲精品码一区二区三区免费看 | 可以免费观看的av片 | www.夜夜干.com | 久久免费视频在线观看6 | 夜又临在线观看 | 黄色资源网站 | 日韩精品一区在线观看 | 久草在线播放视频 | av免费网站 | 欧美二区视频 | 国偷自产中文字幕亚洲手机在线 | 国产精品24小时在线观看 | 国产精品一区二区 91 | 中文字幕一区二区三区在线播放 | 超碰免费在线公开 | 中文字幕乱码在线播放 | 91视频在线观看免费 | 女人18毛片90分钟 | 四虎国产精品成人免费4hu | 天堂网一区二区三区 | 国产精久久久 | 国产精品av在线免费观看 | 久久久久国产精品视频 | 日韩免费视频一区二区 | 免费婷婷| 日韩精品免费在线观看视频 | 天天弄天天干 | 国产精品自产拍在线观看蜜 | 精品美女在线视频 | 正在播放国产精品 | 日韩精品视频在线观看网址 | 欧美精品做受xxx性少妇 | 丁香五月网久久综合 | 久久夜夜夜 | 欧美激情一区不卡 | 欧美日韩在线精品 | 毛片在线播放网址 | 欧美国产一区在线 | 国产在线观看免 | 黄视频网站大全 | 欧美午夜精品久久久久 | 久久国产网站 | www黄色av| 国产成年免费视频 | 日韩大片在线 | 最近中文字幕第一页 | 99一级片 | 国产在线观看免 | 91九色成人蝌蚪首页 | 日韩一区二区三区免费视频 | 国产91九色蝌蚪 | 婷婷午夜| 国产福利a| 久久久国际精品 | 欧美成人性战久久 | 午夜久久 | 日韩三级免费观看 | 欧美日本不卡高清 | 日韩av免费大片 | 亚洲精品中文在线观看 | 欧美一二三区播放 | 欧美日韩二三区 | 国产人成看黄久久久久久久久 | 国产精品久久久久久99 | 色婷五月天 | 最近日韩中文字幕中文 | 中文字幕av有码 | 日韩欧美视频免费在线观看 | 日韩一级电影在线 | 天天射综合 | 成人禁用看黄a在线 | 日日综合网 | 91av综合 | 性色av一区二区三区在线观看 | 国产91精品在线播放 | 国产 日韩 欧美 中文 在线播放 | 丁香电影小说免费视频观看 | 俺要去色综合狠狠 | 综合亚洲视频 | 免费看黄色小说的网站 | 制服丝袜亚洲 | 99久久精品国产网站 | 日韩高清在线看 | 97精品视频在线 | 超碰.com | 2023亚洲精品国偷拍自产在线 | 黄网站污 | 久热国产视频 | 国产成人在线网站 | 婷婷深爱网 | 国产一区二区在线免费视频 | 91成人黄色 | 99re视频在线观看 | 日韩av免费在线看 | 精品国内自产拍在线观看视频 | 欧美精彩视频在线观看 | 九九热视频在线播放 | 天天射天天 | 久久色在线播放 | 成人影视片 | a级国产乱理伦片在线播放 久久久久国产精品一区 | 日韩三级视频在线看 | 国产在线超碰 | 波多野结衣在线播放一区 | 日韩在线色视频 | 欧美精品一区二区蜜臀亚洲 | 国产一区免费在线观看 | 国产精品国产三级国产不产一地 | 国产视频一二区 | 91麻豆看国产在线紧急地址 | 午夜999| 久草在线高清视频 | 麻豆视频一区二区 | 久久九九久久九九 | 久久精品国产免费看久久精品 | 国产精品情侣视频 | 少妇bbbb搡bbbb搡bbbb | 一级黄色片在线免费看 | 久久99亚洲网美利坚合众国 | 欧美午夜理伦三级在线观看 | 黄色一级大片在线免费看产 | 人人澡人人爽欧一区 | 日韩午夜网站 | 国产一二区视频 | 成人cosplay福利网站 | 亚洲全部视频 | 国产精品麻豆视频 | 国产精品 久久 | 丁香色天天 | 婷婷成人在线 | 国产欧美日韩精品一区二区免费 | 香蕉在线视频播放网站 | 美女视频a美女大全免费下载蜜臀 | 国产一区二区中文字幕 | 99精品欧美一区二区 | 黄色软件视频大全免费下载 | 成人黄色免费在线观看 | www.久久色 | 黄色av电影在线观看 | 国产免费人人看 | 国产手机精品视频 | 国产亚洲午夜高清国产拍精品 | 激情视频一区 | 日韩视频三区 | 久草在线高清视频 | 亚洲成人网在线 | 国产在线视频一区二区 | 天天玩夜夜操 | 99视频在线观看免费 | 亚洲日本中文字幕在线观看 | 色婷婷亚洲 | 国产美女免费视频 | 97香蕉视频 | 少妇高潮流白浆在线观看 | 色婷婷激情综合 | 日操操| 91一区二区三区在线观看 | 久草在线手机视频 | 国内精品久久影院 | 久草视频在线资源 | 欧美精品在线一区 | 国产成人高清 | 日韩 国产 | 欧美人人爱 | 91色在线观看视频 | 激情av资源 | 成年人天堂com | 亚洲码国产日韩欧美高潮在线播放 | 五月香婷 | 日韩精品一区不卡 | 人人爽人人射 | 国产精品久久久久久久av电影 | 天天操天天干天天综合网 | 日本三级大片 | 69精品久久久 | 亚洲精品国偷拍自产在线观看 | 亚洲情感电影大片 | 一区二区三区四区在线 | 日日夜夜综合 | 日韩中文幕 | 国产精在线| 久久伊人精品天天 | 国产精品久久久 | 色www永久免费 | 国产精品久久久久久久7电影 | 成年人免费看片网站 | 欧美日韩免费一区 | 亚洲最大在线视频 | 国产一区二区在线观看视频 | 在线观看va | 精品国产一二区 | 亚一亚二国产专区 | 国产高清 不卡 | 五月导航| 国产专区日韩专区 | 国产精品专区在线 | 看av在线 | 久久一区国产 | 国产精品麻豆免费版 | www.久久婷婷 | 国产在线97 | 国产精品自产拍在线观看中文 | 国产高清福利在线 | 精品一区二区免费在线观看 | 久久精品视频免费播放 | 国产精品日韩久久久久 | 久久久伊人网 | 亚洲黄色在线 | 丁香六月婷婷开心婷婷网 | 亚洲精品欧美成人 | 狠狠狠狠狠狠天天爱 | 91精品国产高清自在线观看 | 久久国产精品99久久久久久老狼 | 天天操天天操天天操天天 | 天天做天天干 | 国产精品第52页 | 久久福利小视频 | 黄色资源网站 | 99久久日韩精品视频免费在线观看 | 国产专区第一页 | 国产一区二区三区免费观看视频 | 日韩精品一区二区三区在线播放 | 欧美精品一级视频 | 2019天天干天天色 | 欧美孕交vivoestv另类 | 日韩a在线观看 | 国产精品男女 | av色影院 | 久草在线高清 | 日韩国产在线观看 | 久久久精品视频成人 | 亚洲国产大片 | 又黄又网站 | 成人a免费视频 | 人人玩人人添人人 | 成人四虎| 国产精品黄色 | 四虎国产精品永久在线国在线 | 亚洲在线 | 久久免费片 | 在线国产能看的 | 精品在线免费视频 | 日韩精品久久久免费观看夜色 | 久久99免费| 日韩欧美视频在线 | 91麻豆精品国产自产在线游戏 | 日本黄色免费播放 | 国产精品精品视频 | 国产 日韩 欧美 中文 在线播放 | 91爱爱电影| 国内精品视频在线 | 欧美在线观看视频一区二区 | 亚洲成av人片一区二区梦乃 | 久久99亚洲精品久久久久 | 国产视频在线免费 | 久久黄网站 | 久久午夜免费观看 | 一级片视频免费观看 | www国产亚洲精品久久网站 | 超碰在线人人 | 99久免费精品视频在线观看 | 久草在线资源视频 | 久久国产日韩 | 亚洲色图色 | 波多野结衣在线播放视频 | 精品视频免费在线 | 中文字幕精品三区 | a特级毛片 | 成人黄色大片在线免费观看 | 中文字幕在线观看免费高清完整版 | 国产精品国产亚洲精品看不卡15 | 99久久精品国产网站 | 中文字幕黄色 | 13日本xxxxxⅹxxx20 | 999久久久欧美日韩黑人 | 国产69精品久久99不卡的观看体验 | 久久久久国产一区二区三区四区 | 免费观看完整版无人区 | 国产午夜精品一区二区三区在线观看 | 91精品国产成人www | 国产在线观看你懂得 | 一区二区三区动漫 | 欧美a在线免费观看 | 国产美女在线免费观看 | 亚洲国产中文字幕在线视频综合 | 黄色小说免费观看 | 国产明星视频三级a三级点| 麻豆传媒视频在线免费观看 | 国产99久久久国产精品免费看 | 91视频a| 黄色成人免费电影 | 一区二区三区免费在线 | 久久99国产精品视频 | 国产区免费在线 | 91av视频免费观看 | 国产一区二区精品在线 | 人人爽人人澡人人添人人人人 | 欧美精品午夜 | 亚洲国产av精品毛片鲁大师 | 91粉色视频 | 午夜精品久久久久久久99 | 国产一级片直播 | 五月婷婷爱| 69视频网站| 亚洲精品18日本一区app | 99亚洲精品在线 | 在线中文字母电影观看 | 高清国产一区 | www黄免费| 国产麻豆剧果冻传媒视频播放量 | 欧美一级片免费播放 | 成人中文字幕+乱码+中文字幕 | 欧美巨大 | 亚洲国产理论片 | 久久伊人八月婷婷综合激情 | 成人精品电影 | 国产精久久久 | 久久精品首页 | 五月婷婷婷婷婷 | 精品中文字幕在线观看 | 免费视频久久久久久久 | 欧美日韩不卡一区二区 | 国产黄色片网站 | 激情网色 | av千婊在线免费观看 | 日本丶国产丶欧美色综合 | 久久亚洲私人国产精品 | 国产麻豆剧果冻传媒视频播放量 | 成人超碰在线 | 精品视频亚洲 | 色国产视频 | 久久精品超碰 | 一区二区三区中文字幕在线 | 亚洲高清在线 | 亚洲天堂网在线观看视频 | 久久不射影院 | 91精品视频免费看 | 黄色免费视频在线观看 | 日韩免费一区 | 亚洲精品在线观看中文字幕 | 亚洲成aⅴ人片久久青草影院 | 天天干,天天草 | 欧美精品你懂的 | av中文字幕网址 | 91精品国产综合久久福利 | 国产色久 | 特黄色大片 | 97视频久久久 | 日本精品视频在线观看 | 日韩精品影视 | 在线91色| 在线黄色av电影 | 国产精品久久久久久妇 | www.五月天婷婷.com | 天天干天天拍天天操天天拍 | 黄色国产高清 | 99精品国产亚洲 | 久久在线免费观看 | 国产情侣一区 | 欧美日韩视频在线 | 国产成人一区二区三区电影 | 欧美一级久久久 | www夜夜 | 婷婷爱五月天 | 五月婷婷亚洲 | 欧美美女视频在线观看 | 手机看片久久 | 久久免费视频在线观看 | 日韩欧美xxxx| 人人干在线| 美女久久久久 | 久久只精品99品免费久23小说 | 免费亚洲视频在线观看 | 操操操夜夜操 | 成 人 免费 黄 色 视频 | 成人中文字幕在线观看 | 色瓜 | av成人黄色| av天天在线观看 | 激情图片久久 | 91最新国产 | av在线超碰 | 最近在线中文字幕 | 免费看黄色毛片 | 特黄特色特刺激视频免费播放 | 91看片在线 | 国产在线色站 | 热久久电影 | 午夜黄色一级片 | 久久国产精品免费视频 | 99精品欧美一区二区三区黑人哦 | 69久久久| 美女免费视频一区 | 国产精品久久久99 | 欧美激情精品一区 | 久久久久久久久久久免费av | 免费在线一区二区 | 99视频精品 | www.伊人色.com| 亚洲色五月| 久久国产欧美日韩精品 | 黄色精品网站 | 日韩毛片一区 | 高清视频一区二区三区 | 97超碰福利久久精品 | 五月天激情视频在线观看 | 在线视频 国产 日韩 | 中文字幕在线视频国产 | 91网在线 | 日韩欧美在线综合网 | 欧美日韩精品综合 | 婷婷六月中文字幕 | 不卡的av电影在线观看 | 99国内精品久久久久久久 | 免费手机黄色网址 | 五月婷婷视频在线观看 | 999久久久久久 | 安徽妇搡bbbb搡bbbb | 欧美一级网站 | 午夜精品一区二区三区在线视频 | 亚洲成人国产精品 | 色av色av色av | 久草在线最新免费 | 日韩精选在线观看 | 米奇四色影视 | 日本精品在线 | 日韩成人免费观看 | 99视频+国产日韩欧美 | 日韩欧美一区二区三区黑寡妇 | 亚洲精品视频免费观看 | 免费黄色网址网站 | 亚洲一区二区三区在线看 | 色综合小说 | 四虎8848免费高清在线观看 | 黄色三级在线看 | 美女网站久久 | 亚洲精色| 日本性生活一级片 | 日韩av一区二区三区四区 | 色www.| 国产午夜不卡 | 五月天亚洲激情 | 不卡的av电影| 一区二区三区电影在线播 | 在线视频 国产 日韩 | 天天操偷偷干 | 久久久国产精品人人片99精片欧美一 | 在线免费精品视频 | 亚洲免费在线观看视频 | 欧美一区二区在线免费观看 | 日韩av免费在线电影 | 欧美精品中文在线免费观看 | 日韩电影一区二区三区在线观看 | 国产精品久久视频 | 美女视频黄在线 | 国产精品久久久久三级 | h动漫中文字幕 | 亚洲精品视频免费看 | 亚洲欧美国产精品久久久久 | 亚洲午夜久久久影院 | 久久精品二区 | 鲁一鲁影院 | 久久手机精品视频 | 91网站在线视频 | 成人免费视频a | 久草视频首页 | 91麻豆精品国产91久久久无限制版 | 国产视频 久久久 | 国产区精品区 | 黄色毛片一级 |