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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

java io有关

發(fā)布時(shí)間:2023/12/16 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java io有关 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

寫(xiě)在前面:本文章基本覆蓋了java IO的全部?jī)?nèi)容,java新IO沒(méi)有涉及,因?yàn)槲蚁牒瓦@個(gè)分開(kāi),以突出那個(gè)的重要性,新IO哪一篇文章還沒(méi)有開(kāi)始寫(xiě),估計(jì)很快就能和大家見(jiàn)面。照舊,文章依舊以例子為主,因?yàn)橹v解內(nèi)容的java書(shū)很多了,我覺(jué)的學(xué)以致用才是真。代碼是寫(xiě)出來(lái)的,不是看出來(lái)的。

最后歡迎大家提出意見(jiàn)和建議。

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

?
1 2 3 4 5 6 7 8 9 10 11 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(); ????????} ????} }

【運(yùn)行結(jié)果】:

程序運(yùn)行之后,在d盤(pán)下會(huì)有一個(gè)名字為hello.txt的文件。

【案例2】File類的兩個(gè)常量

?
1 2 3 4 5 6 7 import?java.io.*; class?hello{ ????public?static?void?main(String[] args) { ????????System.out.println(File.separator); ????????System.out.println(File.pathSeparator); ????} }

【運(yùn)行結(jié)果】:

\

;

此處多說(shuō)幾句:有些同學(xué)可能認(rèn)為,我直接在windows下使用\進(jìn)行分割不行嗎?當(dāng)然是可以的。但是在linux下就不是\了。所以,要想使得我們的代碼跨平臺(tái),更加健壯,所以,大家都采用這兩個(gè)常量吧,其實(shí)也多寫(xiě)不了幾行。呵呵、

現(xiàn)在我們使用File類中的常量改寫(xiě)上面的代碼:

?
1 2 3 4 5 6 7 8 9 10 11 12 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(); ????????} ????} }

你看,沒(méi)有多寫(xiě)多少吧,呵呵。所以建議使用File類中的常量。

?

刪除一個(gè)文件

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 /** ?* 刪除一個(gè)文件 ?* */ 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)建一個(gè)文件夾

?
1 2 3 4 5 6 7 8 9 10 11 /** ?* 創(chuàng)建一個(gè)文件夾 ?* */ import?java.io.*; class?hello{ ????public?static?void?main(String[] args) { ????????String fileName="D:"+File.separator+"hello"; ????????File f=new?File(fileName); ????????f.mkdir(); ????} }

【運(yùn)行結(jié)果】:

D盤(pán)下多了一個(gè)hello文件夾

?

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

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 /** ?* 使用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]); ????????} ????} }

【運(yùn)行結(jié)果】:

$RECYCLE.BIN

360

360Downloads

360Rec

360SoftMove

Config.Msi

da

Downloads

DriversBackup

eclipse

java web整合開(kāi)發(fā)和項(xiàng)目實(shí)戰(zhàn)

Lenovo

MSOCache

Program

Program Files

python

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

System Volume Information

Tomcat6

var

vod_cache_data

新建文件夾

(你的運(yùn)行結(jié)果應(yīng)該和這個(gè)不一樣的,呵呵)

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

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

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 /** ?* 使用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]); ????????} ????} }

【運(yùn)行結(jié)果】:

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整合開(kāi)發(fā)和項(xiàng)目實(shí)戰(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:\新建文件夾

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

?

判斷一個(gè)指定的路徑是否為目錄

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 /** ?* 使用isDirectory判斷一個(gè)指定的路徑是否為目錄 ?* */ 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"); ????????} ????} }

【運(yùn)行結(jié)果】:YES

?

搜索指定目錄的全部?jī)?nèi)容

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 /** ?* 列出指定目錄的全部?jī)?nèi)容 ?* */ 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++) { ????????????????????????//遞歸調(diào)用 ????????????????????????print(fileArray[i]); ????????????????????} ????????????????} ????????????} ????????????else{ ????????????????System.out.println(f); ????????????} ????????} ????} }

【運(yùn)行結(jié)果】:

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寫(xiě)入文件

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 /** ?* 使用RandomAccessFile寫(xiě)入文件 ?* */ 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();?? ????} }

如果你此時(shí)打開(kāi)hellotxt查看的話,會(huì)發(fā)現(xiàn)那是亂碼。

?

字節(jié)流

【向文件中寫(xiě)入字符串】

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 /** ?* 字節(jié)流 ?* 向文件中寫(xiě)入字符串 ?* */ 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會(huì)看到“你好”

當(dāng)然也可以一個(gè)字節(jié)一個(gè)字節(jié)的寫(xiě)。

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 /** ?* 字節(jié)流 ?* 向文件中一個(gè)字節(jié)一個(gè)字節(jié)的寫(xiě)入字符串 ?* */ 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é)果還是:“你好”

?

向文件中追加新內(nèi)容:

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 /** ?* 字節(jié)流 ?* 向文件中追加新內(nèi)容: ?* */ 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(); ????} }

【運(yùn)行結(jié)果】:

你好Rollen

?

【讀取文件內(nèi)容】

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 /** ?* 字節(jié)流 ?* 讀文件內(nèi)容 ?* */ 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)); ????} }

【運(yùn)行結(jié)果】

你好Rollen

Rollen_

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

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 /** ?* 字節(jié)流 ?* 讀文件內(nèi)容 ?* */ 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("讀入長(zhǎng)度為:"+len); ????????System.out.println(new?String(b,0,len)); ????} }

【運(yùn)行結(jié)果】:

讀入長(zhǎng)度為:18

你好Rollen

Rollen

?

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

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 /** ?* 字節(jié)流 ?* 讀文件內(nèi)容,節(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("文件長(zhǎng)度為:"+f.length()); ????????in.close(); ????????System.out.println(new?String(b)); ????} }

文件長(zhǎng)度為:18

你好Rollen

Rollen

?

將上面的例子改為一個(gè)一個(gè)讀:

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 /** ?* 字節(jié)流 ?* 讀文件內(nèi)容,節(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)); ????} }

輸出的結(jié)果和上面的一樣。

?

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

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 /** ?* 字節(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)); ????} }

【運(yùn)行結(jié)果】

你好Rollen

Rollen_

提醒一下,當(dāng)獨(dú)到文件末尾的時(shí)候會(huì)返回-1.正常情況下是不會(huì)返回-1

?

字符流

【向文件中寫(xiě)入數(shù)據(jù)】

現(xiàn)在我們使用字符流

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 /** ?* 字符流 ?* 寫(xiě)入數(shù)據(jù) ?* */ 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(); ????} }

當(dāng)你打開(kāi)hellotxt的時(shí)候,會(huì)看到hello

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

當(dāng)你如果想問(wèn)文件中追加內(nèi)容的時(shí)候,可以使用將上面的聲明out的哪一行換為:

Writer out =new?FileWriter(f,true);

這樣,當(dāng)你運(yùn)行程序的時(shí)候,會(huì)發(fā)現(xiàn)文件內(nèi)容變?yōu)?#xff1a;

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

比如將str變?yōu)?/span>String str="\r\nhello";

這樣文件追加的str的內(nèi)容就會(huì)換行了。

?

從文件中讀內(nèi)容:

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 /** ?* 字符流 ?* 從文件中讀出內(nèi)容 ?* */ 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("讀入的長(zhǎng)度為:"+count); ????????System.out.println("內(nèi)容為"+new?String(ch,0,count)); ????} }

【運(yùn)行結(jié)果】:

讀入的長(zhǎng)度為:17

內(nèi)容為hellohello

hello

?

當(dāng)然最好采用循環(huán)讀取的方式,因?yàn)槲覀冇袝r(shí)候不知道文件到底有多大。

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 /** ?* 字符流 ?* 從文件中讀出內(nèi)容 ?* */ 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("內(nèi)容為"+new?String(ch,0,count)); ????} }

運(yùn)行結(jié)果:

內(nèi)容為hellohello

hello

?

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

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

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

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

答案是字節(jié)流。首先因?yàn)橛脖P(pán)上的所有文件都是以字節(jié)的形式進(jìn)行傳輸或者保存的,包括圖片等內(nèi)容。但是字符只是在內(nèi)存中才會(huì)形成的,所以在開(kāi)發(fā)中,字節(jié)流使用廣泛。

文件的復(fù)制

其實(shí)DOS下就有一個(gè)文件復(fù)制功能,比如我們想把d盤(pán)下面的hello.txt文件復(fù)制到d盤(pán)下面的rollen.txt文件中,那么我們就可以使用下面的命令:

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

運(yùn)行之后你會(huì)在d盤(pán)中看見(jiàn)hello.txt.,并且兩個(gè)文件的內(nèi)容是一樣的,(這是屁話)

?

下面我們使用程序來(lái)復(fù)制文件吧。

基本思路還是從一個(gè)文件中讀入內(nèi)容,邊讀邊寫(xiě)入另一個(gè)文件,就是這么簡(jiǎn)單。、

首先編寫(xiě)下面的代碼:

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 /** ?* 文件的復(fù)制 ?* */ import?java.io.*; class?hello{ ????public?static?void?main(String[] args) throws?IOException { ????????if(args.length!=2){ ????????????System.out.println("命令行參數(shù)輸入有誤,請(qǐng)檢查"); ????????????System.exit(1); ????????} ????????File file1=new?File(args[0]); ????????File file2=new?File(args[1]); ????????? ????????if(!file1.exists()){ ????????????System.out.println("被復(fù)制的文件不存在"); ????????????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

現(xiàn)在你就會(huì)在d盤(pán)看到rollen。txt了,

OutputStreramWriter?和InputStreamReader類

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

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

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

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

?

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

?
1 2 3 4 5 6 7 8 9 10 11 12 13 /** ?* 將字節(jié)輸出流轉(zhuǎn)化為字符輸出流 ?* */ 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(); ????} }

運(yùn)行結(jié)果:文件中內(nèi)容為:hello

將字節(jié)輸入流變?yōu)樽址斎肓?/h4> ?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 /** ?* 將字節(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(); ????} }

【運(yùn)行結(jié)果】:hello

前面列舉的輸出輸入都是以文件進(jìn)行的,現(xiàn)在我們以內(nèi)容為輸出輸入目的地,使用內(nèi)存操作流

ByteArrayInputStream?主要將內(nèi)容寫(xiě)入內(nèi)容

ByteArrayOutputStream??主要將內(nèi)容從內(nèi)存輸出

使用內(nèi)存操作流將一個(gè)大寫(xiě)字母轉(zhuǎn)化為小寫(xiě)字母

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 /** ?* 使用內(nèi)存操作流將一個(gè)大寫(xiě)字母轉(zhuǎn)化為小寫(xiě)字母 ?* */ 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); ????} }

【運(yùn)行結(jié)果】:

rollenholt

內(nèi)容操作流一般使用來(lái)生成一些臨時(shí)信息采用的,這樣可以避免刪除的麻煩。

管道流

管道流主要可以進(jìn)行兩個(gè)線程之間的通信。

PipedOutputStream?管道輸出流

PipedInputStream?管道輸入流

驗(yàn)證管道流
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 /** ?* 驗(yàn)證管道流 ?* */ 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("接受的內(nèi)容為 "+(new?String(b,0,len))); ????} } /** ?* 測(cè)試類 ?* */ 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(); ????} }

【運(yùn)行結(jié)果】:

接受的內(nèi)容為?hello , Rollen

打印流

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 /** ?* 使用PrintStream進(jìn)行輸出 ?* */ 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(); ????} }

【運(yùn)行結(jié)果】:

true

Rollen

當(dāng)然也可以格式化輸出

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 /** ?* 使用PrintStream進(jìn)行輸出 ?* 并進(jìn)行格式化 ?* */ 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(); ????} }

【運(yùn)行結(jié)果】:

姓名:Rollen.?年齡:20.

?

使用OutputStream向屏幕上輸出內(nèi)容

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 /** ?* 使用OutputStream向屏幕上輸出內(nèi)容 ?* */ 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(); ????????} ????} }

【運(yùn)行結(jié)果】:

hello

?

輸入輸出重定向

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 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("這些內(nèi)容在文件中才能看到哦!"); ????} }

【運(yùn)行結(jié)果】:

eclipse的控制臺(tái)輸出的是hello。然后當(dāng)我們查看d盤(pán)下面的hello.txt文件的時(shí)候,會(huì)在里面看到:這些內(nèi)容在文件中才能看到哦!

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 import?java.io.File; import?java.io.FileNotFoundException; import?java.io.FileOutputStream; import?java.io.PrintStream; /** ?* System.err重定向 這個(gè)例子也提示我們可以使用這種方法保存錯(cuò)誤信息 ?* */ public?class?systemErr{ ????public?static?void?main(String[] args){ ????????File file = new?File("d:"?+ File.separator + "hello.txt"); ????????System.err.println("這些在控制臺(tái)輸出"); ????????try{ ????????????System.setErr(new?PrintStream(new?FileOutputStream(file))); ????????}catch(FileNotFoundException e){ ????????????e.printStackTrace(); ????????} ????????System.err.println("這些在文件中才能看到哦!"); ????} }

【運(yùn)行結(jié)果】:

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

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 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("讀入的內(nèi)容為:"?+ new?String(bytes, 0, len)); ????????} ????} }

【運(yùn)行結(jié)果】:

前提是我的d盤(pán)下面的hello.txt中的內(nèi)容是:“這些文件中的內(nèi)容哦!”,然后運(yùn)行程序,輸出的結(jié)果為:讀入的內(nèi)容為:這些文件中的內(nèi)容哦!

?

BufferedReader的小例子

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

?
BufferedReader buf = new?BufferedReader( ????????????????new?InputStreamReader(System.in));

下面給一個(gè)實(shí)例:

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 import?java.io.BufferedReader; import?java.io.IOException; import?java.io.InputStreamReader; /** ?* 使用緩沖區(qū)從鍵盤(pán)上讀入內(nèi)容 ?* */ public?class?BufferedReaderDemo{ ????public?static?void?main(String[] args){ ????????BufferedReader buf = new?BufferedReader( ????????????????new?InputStreamReader(System.in)); ????????String str = null; ????????System.out.println("請(qǐng)輸入內(nèi)容"); ????????try{ ????????????str = buf.readLine(); ????????}catch(IOException e){ ????????????e.printStackTrace(); ????????} ????????System.out.println("你輸入的內(nèi)容是:"?+ str); ????} }

運(yùn)行結(jié)果:

請(qǐng)輸入內(nèi)容

dasdas

你輸入的內(nèi)容是:dasdas

?

Scanner類

其實(shí)我們比較常用的是采用Scanner類來(lái)進(jìn)行數(shù)據(jù)輸入,下面來(lái)給一個(gè)Scanner的例子吧

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 import?java.util.Scanner; /** ?* Scanner的小例子,從鍵盤(pán)讀數(shù)據(jù) ?* */ public?class?ScannerDemo{ ????public?static?void?main(String[] args){ ????????Scanner sca = new?Scanner(System.in); ????????// 讀一個(gè)整數(shù) ????????int?temp = sca.nextInt(); ????????System.out.println(temp); ????????//讀取浮點(diǎn)數(shù) ????????float?flo=sca.nextFloat(); ????????System.out.println(flo); ????????//讀取字符 ????????//...等等的,都是一些太基礎(chǔ)的,就不師范了。 ????} }

其實(shí)Scanner可以接受任何的輸入流

下面給一個(gè)使用Scanner類從文件中讀出內(nèi)容

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 import?java.io.File; import?java.io.FileNotFoundException; import?java.util.Scanner; /** ?* Scanner的小例子,從文件中讀內(nèi)容 ?* */ 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("從文件中讀取的內(nèi)容是:"?+ str); ????} }

【運(yùn)行結(jié)果】:

從文件中讀取的內(nèi)容是:這些文件中的內(nèi)容哦!

數(shù)據(jù)操作流DataOutputStream、DataInputStream類

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 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

現(xiàn)在我們?cè)谏厦胬拥幕A(chǔ)上,使用DataInputStream讀出內(nèi)容

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 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); ????} }

【運(yùn)行結(jié)果】:

AB

合并流?SequenceInputStream

SequenceInputStream主要用來(lái)將2個(gè)流合并在一起,比如將兩個(gè)txt中的內(nèi)容合并為另外一個(gè)txt。下面給出一個(gè)實(shí)例:

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 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; /** ?* 將兩個(gè)文本文件合并為另外一個(gè)文本文件 ?* */ 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(); ????} }

【運(yùn)行結(jié)果】

結(jié)果會(huì)在hello.txt文件中包含hello1.txthello2.txt文件中的內(nèi)容。

文件壓縮?ZipOutputStream類

先舉一個(gè)壓縮單個(gè)文件的例子吧:

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 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())); ????????// 設(shè)置注釋 ????????zipOut.setComment("hello"); ????????int?temp = 0; ????????while((temp = input.read()) != -1){ ????????????zipOut.write(temp); ????????} ????????input.close(); ????????zipOut.close(); ????} }

【運(yùn)行結(jié)果】

運(yùn)行結(jié)果之前,我創(chuàng)建了一個(gè)hello.txt的文件,原本大小56個(gè)字節(jié),但是壓縮之后產(chǎn)生hello.zip之后,居然變成了175個(gè)字節(jié),有點(diǎn)搞不懂。

不過(guò)結(jié)果肯定是正確的,我只是提出我的一個(gè)疑問(wèn)而已。

上面的這個(gè)例子測(cè)試的是壓縮單個(gè)文件,下面的們來(lái)看看如何壓縮多個(gè)文件。

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 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; /** ?* 一次性壓縮多個(gè)文件 ?* */ 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(); ????} }

【運(yùn)行結(jié)果】

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

接下來(lái)看看壓縮之后的:

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

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 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()); ????} }

【運(yùn)行結(jié)果】:

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

?

現(xiàn)在我們呢是時(shí)候來(lái)看看如何加壓縮文件了,和之前一樣,先讓我們來(lái)解壓?jiǎn)蝹€(gè)壓縮文件(也就是壓縮文件中只有一個(gè)文件的情況),我們采用前面的例子產(chǎn)生的壓縮文件hello.zip

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 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; /** ?* 解壓縮文件(壓縮文件中只有一個(gè)文件的情況) ?* */ 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(); ????} }

【運(yùn)行結(jié)果】:

解壓縮之前:

這個(gè)壓縮文件還是175字節(jié)

解壓之后產(chǎn)生:

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

?

現(xiàn)在讓我們來(lái)解壓一個(gè)壓縮文件中包含多個(gè)文件的情況吧

ZipInputStream類

當(dāng)我們需要解壓縮多個(gè)文件的時(shí)候,ZipEntry就無(wú)法使用了,如果想操作更加復(fù)雜的壓縮文件,我們就必須使用ZipInputStream類

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 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; /** ?* 解壓縮一個(gè)壓縮文件中包含多個(gè)文件的情況 ?* */ 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(); ????????} ????} }

【運(yùn)行結(jié)果】:

被解壓的文件:

解壓之后再D盤(pán)下會(huì)出現(xiàn)一個(gè)temp文件夾,里面內(nèi)容:

PushBackInputStream回退流

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 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); ????????????} ????????} ????} }

【運(yùn)行結(jié)果】:

hello(回退,) rollenholt

?
1 2 3 4 5 6 7 8 /** ?* 取得本地的默認(rèn)編碼 ?* */ public?class?CharSetDemo{ ????public?static?void?main(String[] args){ ????????System.out.println("系統(tǒng)默認(rèn)編碼為:"?+ System.getProperty("file.encoding")); ????} }

【運(yùn)行結(jié)果】:

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

?

亂碼的產(chǎn)生:

?
import?java.io.File; import?java.io.FileOutputStream; import?java.io.IOException; import?java.io.OutputStream; /** ?* 亂碼的產(chǎn)生 ?* */ 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ùn)行結(jié)果】:

??

?

一般情況下產(chǎn)生亂碼,都是由于編碼不一致的問(wèn)題。

對(duì)象的序列化

對(duì)象序列化就是把一個(gè)對(duì)象變?yōu)槎M(jìn)制數(shù)據(jù)流的一種方法。

一個(gè)類要想被序列化,就行必須實(shí)現(xiàn)java.io.Serializable接口。雖然這個(gè)接口中沒(méi)有任何方法,就如同之前的cloneable接口一樣。實(shí)現(xiàn)了這個(gè)接口之后,就表示這個(gè)類具有被序列化的能力。

先讓我們實(shí)現(xiàn)一個(gè)具有序列化能力的類吧:

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 import?java.io.*; /** ?* 實(shí)現(xiàn)具有序列化能力的類 ?* */ 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; }

這個(gè)類就具有實(shí)現(xiàn)序列化能力,

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

先給一個(gè)ObjectOutputStream的例子吧:

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 import?java.io.Serializable; import?java.io.File; import?java.io.FileOutputStream; import?java.io.IOException; import?java.io.ObjectOutputStream; /** ?* 實(shí)現(xiàn)具有序列化能力的類 ?* */ 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(); ????} }

【運(yùn)行結(jié)果】:

當(dāng)我們查看產(chǎn)生的hello.txt的時(shí)候,看到的是亂碼,呵呵。因?yàn)槭嵌M(jìn)制文件。

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

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 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); ????} }

【運(yùn)行結(jié)果】

姓名:rollen??年齡:20

?

到底序列化什么內(nèi)容呢?

其實(shí)只有屬性會(huì)被序列化。

Externalizable接口

被Serializable接口聲明的類的對(duì)象的屬性都將被序列化,但是如果想自定義序列化的內(nèi)容的時(shí)候,就需要實(shí)現(xiàn)Externalizable接口。

當(dāng)一個(gè)類要使用Externalizable這個(gè)接口的時(shí)候,這個(gè)類中必須要有一個(gè)無(wú)參的構(gòu)造函數(shù),如果沒(méi)有的話,在構(gòu)造的時(shí)候會(huì)產(chǎn)生異常,這是因?yàn)樵诜葱蛄性挼臅r(shí)候會(huì)默認(rèn)調(diào)用無(wú)參的構(gòu)造函數(shù)。

現(xiàn)在我們來(lái)演示一下序列化和反序列話:

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 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; ????} ????// 復(fù)寫(xiě)這個(gè)方法,根據(jù)需要可以保存的屬性或者具體內(nèi)容,在序列化的時(shí)候使用 ????@Override ????public?void?writeExternal(ObjectOutput out) throws?IOException{ ????????out.writeObject(this.name); ????????out.writeInt(age); ????} ????// 復(fù)寫(xiě)這個(gè)方法,根據(jù)需要讀取內(nèi)容 反序列話的時(shí)候需要 ????@Override ????public?void?readExternal(ObjectInput in) throws?IOException, ????????????ClassNotFoundException{ ????????this.name = (String) in.readObject(); ????????this.age = in.readInt(); ????} ????private?String name; ????private?int?age; }

【運(yùn)行結(jié)果】:

姓名:rollen??年齡:20

本例中,我們將全部的屬性都保留了下來(lái),

Serializable接口實(shí)現(xiàn)的操作其實(shí)是吧一個(gè)對(duì)象中的全部屬性進(jìn)行序列化,當(dāng)然也可以使用我們上使用是Externalizable接口以實(shí)現(xiàn)部分屬性的序列化,但是這樣的操作比較麻煩,

當(dāng)我們使用Serializable接口實(shí)現(xiàn)序列化操作的時(shí)候,如果一個(gè)對(duì)象的某一個(gè)屬性不想被序列化保存下來(lái),那么我們可以使用transient關(guān)鍵字進(jìn)行說(shuō)明:

下面舉一個(gè)例子:

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 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; }

【運(yùn)行結(jié)果】:

姓名:null??年齡:20

最后在給一個(gè)序列化一組對(duì)象的例子吧:

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 import?java.io.File; import?java.io.FileInputStream; import?java.io.FileOutputStream; import?java.io.ObjectInputStream; import?java.io.ObjectOutputStream; import?java.io.Serializable; /** ?* 序列化一組對(duì)象 ?* */ 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; }

【運(yùn)行結(jié)果】:

姓名:??hello??年齡:20

姓名:??world??年齡:30

姓名:??rollen??年齡:40

總結(jié)

以上是生活随笔為你收集整理的java io有关的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

日韩欧美在线高清 | 日本黄色大片免费看 | 国产精品日韩久久久久 | 国产精品每日更新 | 亚洲精品欧美专区 | 午夜久久网站 | 亚洲天堂精品视频 | 97在线观看视频免费 | 在线视频 影院 | 天堂av网站 | 精品国产伦一区二区三区观看体验 | 成人免费在线电影 | 超碰97国产精品人人cao | 久草在线视频在线观看 | 亚洲婷婷免费 | 97精品视频在线播放 | 黄色的网站免费看 | 激情综合网五月 | 日韩av影视 | 成年人在线观看网站 | 在线免费黄 | 成人免费视频观看 | 九色视频自拍 | 999在线精品| 天天艹天天操 | 99精品免费久久久久久日本 | 色婷婷激婷婷情综天天 | 999成人| 三级动图 | 中文字幕精品久久 | 97精品国产97久久久久久春色 | 国内精品久久久久久中文字幕 | 国产一区二区精品在线 | 国产精品久久久久久久久久三级 | 男女啪啪视屏 | 日韩精品第1页 | 午夜国产一区 | 99麻豆视频 | 欧美乱码精品一区 | 99精品视频在线播放观看 | 国产成人精品久久久久 | 欧美一级片免费在线观看 | 97电影网手机版 | 中文字幕一区二区在线播放 | 青青网视频| 国产视频在线免费 | 国产精品中文字幕在线播放 | 欧美日韩国产一区二区三区 | 精品久久久久国产免费第一页 | 欧美精品一区二区性色 | 国产精品视频地址 | 国产精品2区 | 久久精品欧美一区二区三区麻豆 | 日本成人黄色片 | 国产黄影院色大全免费 | 国产亚洲免费观看 | 69精品久久 | 久久久激情网 | 国产美女被啪进深处喷白浆视频 | 久久久久在线观看 | 国产高清在线a视频大全 | 91看毛片 | 国产一区二区午夜 | 亚洲经典在线 | 日韩a免费 | 中文字幕在线免费看 | 国产精品网址在线观看 | 婷婷精品国产一区二区三区日韩 | 欧洲精品亚洲精品 | 五月婷婷视频 | 亚洲精品理论片 | av久久在线 | 久久久久久久久久久精 | 精品一区二区视频 | 波多野结衣久久精品 | 天天射综合网站 | 中文字幕观看视频 | 日韩最新在线 | 国产99久久九九精品免费 | 亚洲激情电影在线 | 午夜在线免费视频 | a天堂中文在线 | 在线成人小视频 | 日本在线观看中文字幕 | 麻豆激情电影 | 涩涩在线| 天天色图| 色福利网站| 日韩免费一级电影 | 国产精品一区二区三区在线 | 亚洲丝袜中文 | 一 级 黄 色 片免费看的 | 麻豆视频一区 | 日韩乱理 | 99色在线| 免费观看一级视频 | 国产免费又爽又刺激在线观看 | 欧美一二区视频 | 久久在视频 | 国产欧美高清 | 日本久久久久久久久久 | 蜜臀av性久久久久蜜臀aⅴ四虎 | 91网址在线观看 | 免费在线观看成人小视频 | 国产97碰免费视频 | 国产一级淫片在线观看 | 一级一片免费视频 | 91爱爱免费观看 | 国产精品18videosex性欧美 | 日韩有码中文字幕在线 | 五月天久久久久 | 国产欧美精品一区二区三区四区 | 欧美精品亚州精品 | 永久av免费在线观看 | 69精品在线 | 国产精品久久久久av | 黄色91在线| 97成人精品视频在线播放 | 国产精品国产三级在线专区 | www欧美xxxx | av中文国产 | 五月婷婷六月丁香激情 | 97在线免费观看视频 | 免费观看视频的网站 | 色网站在线 | 成人免费网视频 | 久久精品一区二区三区中文字幕 | 国产精品视频在线看 | 日韩1页| 国产一级一片免费播放放a 一区二区三区国产欧美 | 精品国产伦一区二区三区观看体验 | 西西www4444大胆在线 | 欧美精品免费一区二区 | 成年人在线播放视频 | 亚洲美女免费精品视频在线观看 | 成人动态视频 | 欧美一区在线观看视频 | 久久在线一区 | www.成人久久 | 五月婷婷另类国产 | 91九色视频在线 | 深夜免费小视频 | 国产中文字幕在线看 | 9999激情 | 日韩乱码中文字幕 | 国产九色在线播放九色 | 日韩激情免费视频 | 国产视频精品免费播放 | 人人爽人人爽人人片av | 男女拍拍免费视频 | 久久久久电影网站 | 精品免费| 日韩色av色资源 | 91插插影库 | 国产成人精品在线播放 | 亚洲精品视频在线看 | 欧美韩日视频 | 999国内精品永久免费视频 | 国产视频在线观看一区 | 国内偷拍精品视频 | 久草在线这里只有精品 | 超碰在线最新 | 黄色av网站在线观看 | 亚洲免费国产视频 | 日韩美在线观看 | 国产一区二区三区四区在线 | 成人av高清 | 91亚洲影院 | 日韩中文字幕国产 | 婷婷爱五月天 | 中文字幕观看在线 | 一区二区三区精品在线 | 国产成人在线一区 | 成年人黄色av | 色九九在线 | 久久精品国产v日韩v亚洲 | 国产精品久久久99 | 中文字幕麻豆 | 91伊人久久大香线蕉蜜芽人口 | 日韩激情中文字幕 | 国产精品一区二区白浆 | 色偷偷网站视频 | 精品在线视频观看 | 亚洲综合最新在线 | 91九色porny蝌蚪视频 | www.色五月| 亚州精品成人 | 久久男人中文字幕资源站 | 91亚洲欧美激情 | 婷婷六月天在线 | 精品国产一区二区三区男人吃奶 | 69av免费视频| 1区2区视频 | 欧美怡红院 | 最新日韩视频在线观看 | 97免费视频在线播放 | 91成人网页版 | 激情深爱 | 亚洲播播 | 亚洲午夜精品电影 | 久久区二区 | 97色资源 | 国产色小视频 | 国产一级黄色免费看 | 日韩av网站在线播放 | 欧美另类巨大 | av成人在线播放 | 国产综合香蕉五月婷在线 | 在线成人国产 | 婷婷视频在线观看 | 国产亚洲精品久久久久久无几年桃 | 香蕉视频在线免费看 | 日韩a在线播放 | 亚洲精品综合在线观看 | 成人激情开心网 | 国产精品久久久久久久久久久久午 | 中文字幕在线观看的网站 | 欧美日韩一区二区久久 | www.五月天婷婷.com | 欧美三级高清 | 亚洲 av网站| 久草在线观看 | 免费高清在线视频一区· | 久久在线看 | 五月天激情综合网 | 天天操天天干天天综合网 | 久久人人插 | 中文乱码视频在线观看 | 亚洲欧美激情精品一区二区 | 97免费在线观看 | 女人18片毛片90分钟 | 婷婷电影在线观看 | 久久精品国产一区二区电影 | 国产高清在线免费视频 | 在线观看免费黄视频 | 国产一区二区三区午夜 | 亚洲国产中文字幕在线观看 | 在线黄色av | 天天操天天草 | 国产一区成人 | 免费成人看片 | 91私密视频 | 香蕉精品在线观看 | 国产黄色在线看 | 97在线观看视频免费 | 精品久久1 | 黄色在线观看免费 | 亚洲网久久 | 99精品免费在线 | 国产精品麻豆三级一区视频 | 黄色免费看片网站 | 国产99久久久精品 | 成人丁香花| 91人人爽久久涩噜噜噜 | av在线播放一区二区三区 | 成人全视频免费观看在线看 | 欧美一级欧美一级 | 黄色一级大片在线免费看产 | 精品99在线视频 | 久久成人国产 | 欧美日韩二区三区 | 91视视频在线直接观看在线看网页在线看 | 天天综合区 | 精品国产欧美一区二区 | 久久综合亚洲鲁鲁五月久久 | 日韩在线观看一区二区三区 | 深夜福利视频一区二区 | 久久99亚洲热视 | 黄网站色视频免费观看 | 亚洲爱视频 | 国产精品久久久久久婷婷天堂 | 国产精品免费av | 欧美一级片在线播放 | 亚洲欧美日韩精品久久奇米一区 | av网站有哪些 | av不卡免费在线观看 | 国产精品1024 | 99视频精品免费观看, | 在线观看韩日电影免费 | 人人添人人 | 91.精品高清在线观看 | 天天碰天天操 | 少妇性xxx| 久久精品视频免费观看 | 91精品久久久久久综合乱菊 | 精品久久99 | 一级片免费视频 | 亚洲精品国产精品久久99热 | 在线免费观看黄色大片 | 国产精品久久网站 | 偷拍区另类综合在线 | 亚洲一区二区三区毛片 | 久久一区二区三区日韩 | 欧美精品三级在线观看 | 国产精品久久久久久一二三四五 | 九九精品视频在线观看 | 国产不卡精品视频 | 中日韩在线视频 | 国产精品久久久影视 | 久久综合婷婷国产二区高清 | 国产精品v欧美精品v日韩 | 精品一区二三区 | 国产精品免费大片视频 | 日韩视频免费观看高清 | 超碰在线日韩 | 色中色亚洲 | 五月婷婷在线播放 | 精品国产视频在线观看 | 日韩免费在线观看视频 | 婷婷丁香在线观看 | 午夜久操 | 亚洲日本在线视频观看 | 毛片久久久| 欧美专区国产专区 | 婷婷色视频 | 国产精品午夜8888 | 精品嫩模福利一区二区蜜臀 | 国产精品久久99综合免费观看尤物 | 久久色亚洲 | 久久久久福利视频 | 精品在线免费视频 | 性色av一区二区三区在线观看 | 国产精品一区二区av影院萌芽 | 黄色网www | 久久精品国产v日韩v亚洲 | 久在线观看视频 | 亚洲激情 在线 | 日韩久久精品一区二区三区下载 | 欧美色图另类 | 综合在线亚洲 | a视频在线观看免费 | 亚洲最快最全在线视频 | 在线视频麻豆 | 欧美一级片播放 | 欧美日韩裸体免费视频 | 久久国产精品一二三区 | 在线色资源 | 久久a热6| 在线观看你懂的网址 | 色小说在线 | 美女一区网站 | www.色午夜 | 麻豆观看| 成年美女黄网站色大片免费看 | 亚洲精品网站在线 | 99久免费精品视频在线观看 | 在线国产能看的 | 黄色成人影视 | 亚洲性少妇性猛交wwww乱大交 | 伊人婷婷激情 | 97天天综合网| 婷婷国产在线 | www.狠狠操.com| 狠狠躁夜夜躁人人爽视频 | 00av视频| 久久精品精品电影网 | 国产精品久久久久一区二区三区共 | 成人综合婷婷国产精品久久免费 | 91精品成人久久 | 精品一区 在线 | 97色综合 | 日韩理论片在线 | 久久久片 | av夜夜操 | 国产一级在线观看视频 | 精品国产一区二区三区久久久 | 五月天.com| 国产aa免费视频 | 自拍超碰在线 | 欧美激情第28页 | 五月的婷婷 | 免费观看的av网站 | 亚洲理论电影 | 欧洲黄色片 | 国产高清视频色在线www | 久久国产色| 黄色a一级视频 | 国产女做a爱免费视频 | 成人国产综合 | 99在线免费观看视频 | 国产又粗又硬又爽视频 | 91精品国产乱码久久桃 | 99操视频| 日本性生活一级片 | 欧美日韩国产综合一区二区 | 久草在线在线精品观看 | 日韩免费一区二区 | 久艹视频在线免费观看 | 亚洲精品国产成人av在线 | 久草在线观 | 日日日爽爽爽 | av一区在线播放 | 日韩网站免费观看 | 日韩午夜小视频 | 日韩精品一区电影 | 午夜视频一区二区 | 九色免费视频 | 免费看三级网站 | 三级黄色大片在线观看 | 中文字幕在线免费观看 | 麻花豆传媒mv在线观看 | 免费视频91 | 97超碰网| 91av电影 | 天堂在线一区 | 日韩午夜在线观看 | 日韩视频在线不卡 | 丁香婷婷激情国产高清秒播 | 成人免费观看视频大全 | 国产香蕉久久精品综合网 | 国产午夜免费视频 | 久久久www成人免费精品 | 国产第页 | 92av视频 | 毛片美女网站 | 亚洲激情综合 | 久久8精品 | 丁香六月综合网 | 欧美日韩有码 | 日韩欧美一级二级 | 亚洲成人av免费 | 夜夜干天天操 | 亚洲资源一区 | 日本三级国产 | 日本在线观看中文字幕 | 91精品国产欧美一区二区 | 99精品视频免费看 | 91视频国产免费 | 精品久久久一区二区 | 欧美一级电影片 | 美女久久网站 | 久草在线91 | 91麻豆视频 | 国产69精品久久久久久 | 成人网在线免费视频 | 免费视频区| 四虎天堂 | 日本精品视频在线 | 国产欧美日韩视频 | 激情在线网站 | 五月婷婷色播 | 久久精品直播 | 国产日韩精品久久 | 天天操操 | 天天干天天看 | 日韩一级黄色片 | 国产精品视频全国免费观看 | 久久久久久久国产精品影院 | 视频在线观看99 | 色成人亚洲网 | 久久综合精品国产一区二区三区 | 日韩成人在线一区二区 | 欧美性精品 | 黄色免费高清视频 | 九九热在线免费观看 | av在线最新| 天天综合在线观看 | 日日麻批40分钟视频免费观看 | 国产精品 中文字幕 亚洲 欧美 | 国产黄色在线网站 | 日韩av免费一区 | 999电影免费在线观看 | 国产精品美女久久久久久免费 | 婷婷电影在线观看 | 夜色资源站国产www在线视频 | 三级av网| 91精品视频免费在线观看 | 少妇高潮流白浆在线观看 | 欧美91视频 | 国产精品久久久久久久久软件 | 国产麻豆精品传媒av国产下载 | 亚洲综合国产精品 | 欧美精品久久久久久久久久白贞 | 国产一级在线看 | 91av福利视频 | 精品国产久 | 国产va在线观看免费 | 中文字幕一区二区三区四区在线视频 | 精品国产观看 | 久久久久久免费网 | 天天色欧美 | 狠狠操狠狠干2017 | 五月天电影免费在线观看一区 | av直接看 | 亚洲精品国产精品久久99 | 日批视频国产 | 成人黄色一级视频 | 欧美一级在线 | 五月天av在线 | 色综合欧洲 | 日韩av区| 天天干天天色2020 | 九九免费精品 | 欧美日韩国语 | 狠狠色丁香九九婷婷综合五月 | 日韩精品一区二区免费视频 | 日韩欧美在线观看 | 国产色爽 | 狠狠操天天操 | 夜夜躁日日躁 | 国产亚洲精品日韩在线tv黄 | 国产午夜免费视频 | free,性欧美| 日日操操| 亚洲人人av | 久草在线视频看看 | 黄色影院在线免费观看 | 在线免费黄色av | 国产精品入口a级 | 欧美综合色 | 国产成人精品三级 | 国产一级a毛片视频爆浆 | 精品国产一区二区三区久久久 | 亚洲欧洲视频 | 日韩国产欧美在线视频 | 国产不卡精品 | 日韩草比 | 天天在线视频色 | 91精品免费在线观看 | 伊人官网 | 国产99在线免费 | 免费看一级黄色大全 | 国产精品久久毛片 | 色婷婷导航| 国产精品入口久久 | 三级视频国产 | 国产一卡在线 | av网站手机在线观看 | 欧美aaaxxxx做受视频 | 日韩高清免费在线观看 | 成x99人av在线www | 天天搞天天 | 精品国产不卡 | 亚洲精品久久久久中文字幕m男 | 国产免费xvideos视频入口 | 国外成人在线视频网站 | 在线观看国产福利片 | 国产高清在线免费观看 | 国产成人精品久久久久蜜臀 | 日韩欧美一区二区三区在线观看 | 亚洲国产精品第一区二区 | 日韩免费一级a毛片在线播放一级 | 久久精品这里热有精品 | av女优中文字幕在线观看 | 日本mv大片欧洲mv大片 | 911久久香蕉国产线看观看 | 99视频在线观看一区三区 | 中文字幕av网站 | 黄色.com| 国产在线中文 | 精品国产a| 国产aa免费视频 | 一区二区三区韩国免费中文网站 | 日韩在线观 | 视频在线观看91 | 国产女人免费看a级丨片 | 久久久久www | 91精品国产福利在线观看 | 久久婷婷色综合 | 久久久久久国产精品亚洲78 | 国产一区二区精品 | 国产伦理一区二区三区 | 91精品国产自产在线观看 | 国产成人精品综合 | 黄色大全在线观看 | 日韩在线网址 | 欧美日本高清视频 | 2018精品视频| 午夜精品一区二区三区免费 | 韩日视频在线 | 麻豆精品视频在线观看免费 | 在线看日韩 | 9999国产精品| 韩国av免费在线观看 | 亚洲精品乱码久久久久久按摩 | 久久久久久久久久久免费视频 | 在线视频久久 | 天天操天天干天天爽 | 中文字幕国产视频 | 亚洲精品av在线 | 97看片 | 久久精品国产一区二区电影 | 园产精品久久久久久久7电影 | 99视频在线播放 | 久久精品国产免费看久久精品 | 二区三区毛片 | 国产在线精品一区 | 亚洲天堂免费视频 | 国产日韩精品久久 | 亚州精品成人 | 久久精品一二三区白丝高潮 | 国产3p视频 | 欧美一级片在线播放 | 精品日韩在线 | 国产黄在线播放 | 日韩中文字幕免费看 | 国产手机视频在线观看 | 91天天视频| 91网站观看 | 黄色三级免费片 | 最新国产在线视频 | 久久久久久高潮国产精品视 | 国产精品精品久久久久久 | 久久天堂亚洲 | 99国产精品视频免费观看一公开 | 婷婷av电影| 特黄特色特刺激视频免费播放 | av免费网站| 免费久久久久久 | 9在线观看免费高清完整版在线观看明 | 国产黄色高清 | 亚洲中字幕 | 97国产精品一区二区 | 亚洲人成人天堂h久久 | 夜夜躁狠狠躁日日躁视频黑人 | 亚洲第一区在线观看 | 高清av免费一区中文字幕 | 91麻豆精品国产91久久久久久久久 | 国产精品毛片久久久 | 51精品国自产在线 | 91视频a| 国产精品一区在线播放 | 日韩高清一区 | 免费毛片aaaaaa | 黄色a一级视频 | 婷婷色av| 日本高清中文字幕有码在线 | 国产亚洲精品成人 | 天天干天天摸天天操 | 亚洲精品激情 | 丁香色天天 | 九九九在线观看 | 超碰在线98| 久久一级电影 | 超碰电影在线观看 | 国内成人av| 婷婷色网址 | 成人久久18免费网站图片 | 天天色草| 中文国产成人精品久久一 | 在线观看免费av网站 | 最新日韩电影 | 中文字幕高清免费日韩视频在线 | 亚洲高清激情 | 综合久久婷婷 | 91tv国产成人福利 | 中文字幕在线久一本久 | 国产精品女教师 | 69夜色精品国产69乱 | 天天综合区 | 日韩区在线观看 | 成人久久免费 | 成人一区在线观看 | 精品中文字幕视频 | 日韩电影中文字幕在线观看 | 亚洲毛片在线观看. | 中文字幕乱在线伦视频中文字幕乱码在线 | 成人黄色国产 | 在线视频日韩精品 | 麻豆视屏| 中文字幕在线免费看 | 久久久精品电影 | 国产精品久久 | 亚洲精品综合在线 | 欧美激情精品久久久久久变态 | 人人看人人草 | 草久热| www.亚洲黄色 | 久久成人视屏 | 免费看黄电影 | 中文在线a√在线 | 婷婷激情网站 | 日本不卡久久 | 欧美日韩性生活 | 最新av网址在线观看 | 婷婷综合久久 | 欧美性久久久 | 国产精品美女网站 | 99国产在线视频 | 色com网 | 国产精品一区二区中文字幕 | 亚洲视频 中文字幕 | 91在线免费播放视频 | 丁香婷婷综合激情五月色 | 国产成免费视频 | 亚洲精品国产精品国产 | 国产999精品久久久影片官网 | 人成电影网 | 日韩一二三 | 亚洲精品自拍 | 在线观看黄色国产 | 天天操夜操视频 | 91精品国自产在线观看欧美 | 日韩av美女 | 国产又粗又猛又爽 | 在线中文字幕电影 | 最近中文国产在线视频 | 日本精品久久久久久 | 久久久久久久久久国产精品 | 久草免费福利在线观看 | 久久久久女教师免费一区 | 在线av资源 | 国产精品综合久久 | www天天操 | 日日干干夜夜 | 亚洲精品在线视频网站 | 97碰在线| 国产精品日韩 | 91在线看片 | 国产黄色成人 | 日韩在线观看视频免费 | 欧美日韩三级在线观看 | 日韩一区视频在线 | 在线精品国产 | 日本高清中文字幕有码在线 | 国产成人精品av久久 | av丝袜在线 | 久久激情日本aⅴ | 99视频在线免费 | 99久久精品免费看国产免费软件 | 91麻豆精品 | 国产aaa大片 | 日韩黄色免费电影 | 九九视频网 | 成人小视频在线观看免费 | 亚洲影音先锋 | 中文一区在线 | 99久久久久久 | 99精品国产视频 | 最近中文字幕大全中文字幕免费 | 亚洲色图激情文学 | 91精品国自产拍天天拍 | 99精品成人 | 日韩黄色免费 | 久久r精品| 国产精品久久久久久久久久久久冷 | 久久精品综合网 | 国产拍揄自揄精品视频麻豆 | 欧美成年人在线观看 | www.国产在线 | 91视频3p| 91免费网站在线观看 | 激情欧美日韩一区二区 | 亚洲另类久久 | 亚洲国产黄色片 | 国产一区视频在线播放 | 亚洲精品影视在线观看 | 成人在线黄色电影 | 亚洲成人网在线 | 99久久精品视频免费 | 国产精品视频内 | 一区二区三区中文字幕在线观看 | 免费观看日韩 | 国产黄色在线看 | 99久久999久久久精玫瑰 | 免费视频网 | 久久久网址 | 麻豆国产精品永久免费视频 | 亚洲黄色av网址 | 日韩一区精品 | 亚洲午夜精品一区二区三区电影院 | 人人插人人舔 | avwww在线观看 | 日韩高清在线不卡 | 欧洲在线免费视频 | 天天干夜夜夜 | 精品久久电影 | 国产精品正在播放 | 国产中文字幕一区二区三区 | 丁香婷婷久久 | 日韩中文字幕免费视频 | 性色av一区二区三区在线观看 | 久久综合九色综合97婷婷女人 | 国产精品99久久久久久久久久久久 | 最近免费中文字幕大全高清10 | 日日夜夜网站 | 久久精品亚洲综合专区 | 色综合天天 | 国产夫妻性生活自拍 | 欧美日韩精品在线播放 | 国产精品久久嫩一区二区免费 | 天天射天天爽 | 免费看久久久 | 国产亚洲视频中文字幕视频 | 久久精品123 | www.成人sex| 夜色成人av | www色网站 | 欧美一级性生活 | 天天操夜夜做 | 夜夜夜夜夜夜操 | 亚洲国产免费 | 亚洲欧美在线视频免费 | 一区二区三区在线播放 | 综合网天天射 | 又粗又长又大又爽又黄少妇毛片 | 青春草免费在线视频 | 国产97色在线 | 婷婷 中文字幕 | 天天弄天天干 | 国产中文视 | 久久免费国产精品 | 香蕉免费 | 免费观看黄色12片一级视频 | 香蕉视频网址 | 中文字幕视频观看 | 久久久久久久久久久久电影 | 在线你懂的视频 | 精品美女久久久久 | 美女网站视频免费黄 | 久草视频中文 | 五月婷婷一区 | 国产群p视频| 国产明星视频三级a三级点| 亚洲精品综合在线观看 | 激情伊人 | 探花视频在线观看 | 国产亚洲一区二区在线观看 | 午夜国产福利在线 | 一级黄色片在线观看 | 久久午夜羞羞影院 | 91毛片在线 | 一级c片| 精品国产成人在线影院 | 日日摸日日爽 | 二区三区精品 | 国产精品999久久久 久产久精国产品 | 精品专区一区二区 | 一级黄色a视频 | 日韩电影在线观看一区二区三区 | 五月天久久 | 欧美一区二区在线刺激视频 | 在线成人小视频 | 久久一区二区三区超碰国产精品 | avhd高清在线谜片 | 九九热在线免费观看 | 成年人免费在线 | 日韩免费三级 | 日韩av免费大片 | 激情欧美一区二区免费视频 | 久久久久久久久爱 | 91久久精品一区二区三区 | 免费在线一区二区 | 91免费看片黄 | 三级a毛片 | 亚洲高清视频在线观看 | 最近字幕在线观看第一季 | 亚洲精品一区二区三区新线路 | 国产美女精品人人做人人爽 | 亚洲天堂va | 不卡的av在线播放 | 欧美激情h | 国产黄色美女 | 亚一亚二国产专区 | 国产综合福利在线 | 国产精品久久嫩一区二区免费 | 一区二区精品视频 | 99久久激情 | 久草网在线视频 | 国产精品久久一 | 天天躁日日躁狠狠躁 | 久久久精品视频成人 | 男女激情网址 | 色综合久久99 | 激情五月婷婷激情 | 人人爽人人搞 | 天天插天天射 | 色综合久久久网 | 国产99一区二区 | 色婷婷在线播放 | 天天狠狠干 | 青青色影院| 国产一级二级av | 久久亚洲影视 | 天天干天天干天天干天天干天天干天天干 | 日韩免费视频网站 | 婷婷丁香七月 | 在线观看一级 | 国产视频999| 亚洲精品五月 | 中文字幕免费成人 | 激情av五月婷婷 | 日本黄色免费观看 | 不卡的av电影 | 国产成人精品福利 | 人人涩| 亚洲精品综合一二三区在线观看 | 最新国产中文字幕 | 午夜av在线 | 色综合天天综合网国产成人网 | 亚洲成人高清在线 | 一区二区三区在线免费观看视频 | 免费a级观看| 日韩精品视频一二三 | 少妇性bbb搡bbb爽爽爽欧美 | 偷拍区另类综合在线 | 日本久久电影 | 亚洲人人射| 9999国产精品 | 18pao国产成视频永久免费 | 五月婷婷在线观看视频 | 久久久久久伊人 | 99热精品在线观看 | 色亚洲激情 | 六月丁香六月婷婷 | 国产亚洲精品综合一区91 | 国产成人在线播放 | 欧美视频在线观看免费网址 | 手机看片| 欧美精品久久久久久久久久白贞 | 97人人人人| 日韩成人邪恶影片 | 国产日韩欧美视频在线观看 | 国产视频一区精品 | 麻豆国产精品永久免费视频 | 97色在线视频 | 色婷婷97 | 久久久www成人免费精品张筱雨 | 国产成人亚洲精品自产在线 | 国产中年夫妇高潮精品视频 | 97精品在线 | 亚州视频在线 | 亚洲理论在线观看 | 久久综合九色综合97_ 久久久 | 免费观看www7722午夜电影 | 精品久久久久久国产偷窥 | 亚洲,国产成人av | 亚洲精品国产欧美在线观看 | 国产黄大片在线观看 | 欧美日韩国产一区 | 天天操网址 | 国产亚洲免费观看 | 草久中文字幕 | 成人av在线播放网站 | 中文字幕一区二区三区在线观看 | 三级在线视频播放 | 精品乱码一区二区三四区 | 久久久久亚洲精品男人的天堂 | www五月婷婷 | 天天舔天天射天天操 | 97超碰伊人 | 在线91播放 | 992tv人人网tv亚洲精品 | 亚洲五月花| 99精品视频免费在线观看 | 中国美女一级看片 | 国产视频丨精品|在线观看 国产精品久久久久久久久久久久午夜 | 国产免费观看久久黄 | 免费的黄色的网站 | 亚洲精品免费在线观看视频 | 在线观看国产中文字幕 | 国产视频1 | 麻豆免费在线视频 | 欧美一二三四在线 | 国产精品免费不 | 狠狠操狠狠干天天操 | 2021国产视频 | 亚洲成成品网站 | 日色在线视频 | 免费观看完整版无人区 | 午夜精品久久 | 狠狠的干狠狠的操 | 午夜视频免费 | 日韩成人免费在线电影 | 国产一级黄色片免费看 | 国产小视频你懂的在线 | 日日夜夜av | 亚洲精品乱码久久久久久 | 亚洲精品国偷拍自产在线观看蜜桃 | 免费三级大片 | 国产在线观看99 | 久久精品国产亚洲精品 | 91在线精品视频 | 一区二区三区三区在线 | 亚洲精品男人天堂 | 超碰在线免费福利 | 麻豆精品视频在线观看免费 | 国产一级特黄毛片在线毛片 | 丁香久久久 | 久久精品成人 | 亚洲资源在线网 | 中文字幕乱码视频 | 一区二区中文字幕在线播放 | 国产精品久久久久久久久久白浆 | 国产成a人亚洲精v品在线观看 | 久久久久久久久国产 | 国产91粉嫩白浆在线观看 | 91激情视频在线观看 | 欧美肥妇free| 中文字幕在线观看网址 | 天天操网站 | 色就干| 中文字幕在线有码 | 久久曰视频 | 精品a在线| 国产精品久久久久久超碰 | 少妇bbb搡bbbb搡bbbb′ | 天天天干天天射天天天操 |