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

歡迎訪問 生活随笔!

生活随笔

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

java

Java中的IO整理

發布時間:2023/12/16 java 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java中的IO整理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

學習Java的同學注意了!!!?
學習過程中遇到什么問題或者想獲取學習資源的話,歡迎加入Java學習交流群,群號碼:456544752 ?我們一起學Java!


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

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

【案例1】創建一個新文件

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(); ???????? } ???? } }

【運行結果】:

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

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

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); ???? } }

【運行結果】:

\

;

此處多說幾句:有些同學可能認為,我直接在windows下使用\進行分割不行嗎?當然是可以的。但是在Linux下就不是\了。所以,要想使得我們的代碼跨平臺,更加健壯,所以,大家都采用這兩個常量吧,其實也多寫不了幾行。呵呵、

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

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(); ???????? } ???? } }

你看,沒有多寫多少吧,呵呵。所以建議使用File類中的常量。

?

刪除一個文件

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 /** ? * 刪除一個文件 ? * */ 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( "文件不存在" ); ???????? } ????????? ???? } }

創建一個文件夾

1 2 3 4 5 6 7 8 9 10 11 /** ? * 創建一個文件夾 ? * */ 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文件夾

?

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

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]); ???????? } ???? } }

【運行結果】:

$RECYCLE.BIN

360

360Downloads

360Rec

360SoftMove

Config.Msi

da

Downloads

DriversBackup

eclipse

java web整合開發和項目實戰

Lenovo

MSOCache

Program

Program Files

Python

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

System Volume Information

Tomcat6

var

vod_cache_data

新建文件夾

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

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

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

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]); ???????? } ???? } }

【運行結果】:

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整合開發和項目實戰

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更加方便、

?

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

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

?

搜索指定目錄的全部內容

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.*; 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寫入文件

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 /** ? * 使用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查看的話,會發現那是亂碼。

?

字節流

【向文件中寫入字符串】

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

當然也可以一個字節一個字節的寫。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 /** ? * 字節流 ? * 向文件中一個字節一個字節的寫入字符串 ? * */ 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(); ???? } }

結果還是:“你好”

?

向文件中追加新內容:

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

?

【讀取文件內容】

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 /** ? * 字節流 ? * 讀文件內容 ? * */ 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);的返回值來設計程序。如下:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 /** ? * 字節流 ? * 讀文件內容 ? * */ 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

?

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

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 /** ? * 字節流 ? * 讀文件內容,節省空間 ? * */ 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

?

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

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

輸出的結果和上面的一樣。

?

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

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 /** ? * 字節流 ? *讀文件 ? * */ 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的

?

字符流

【向文件中寫入數據】

現在我們使用字符流

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 /** ? * 字符流 ? * 寫入數據 ? * */ 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

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

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

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

這樣,當你運行程序的時候,會發現文件內容變為:

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

比如將str變為String str="\r\nhello";

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

?

從文件中讀內容:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 /** ? * 字符流 ? * 從文件中讀出內容 ? * */ 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

?

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

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 /** ? * 字符流 ? * 從文件中讀出內容 ? * */ 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

?

關于字節流和字符流的區別

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

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

使用字節流好還是字符流好呢?

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

文件的復制

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

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

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

?

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

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

首先編寫下面的代碼:

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 /** ? * 文件的復制 ? * */ 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類中除了字節流和字符流還包括字節和字符轉換流。

OutputStreramWriter將輸出的字符流轉化為字節流

InputStreamReader將輸入的字節流轉換為字符流

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

?

將字節輸出流轉化為字符輸出流

1 2 3 4 5 6 7 8 9 10 11 12 13 /** ? * 將字節輸出流轉化為字符輸出流 ? * */ 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

將字節輸入流變為字符輸入流

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 /** ? * 將字節輸入流變為字符輸入流 ? * */ 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??主要將內容從內存輸出

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

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 /** ? * 使用內存操作流將一個大寫字母轉化為小寫字母 ? * */ 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?管道輸入流

驗證管道流
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 /** ? * 驗證管道流 ? * */ import? java.io.*; /** ? * 消息發送類 ? * */ 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

打印流

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

當然也可以格式化輸出

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 /** ? * 使用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向屏幕上輸出內容

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

?

輸入輸出重定向

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( "這些內容在文件中才能看到哦!" ); ???? } }

【運行結果】:

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

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重定向 這個例子也提示我們可以使用這種方法保存錯誤信息 ? * */ 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中會看到:這些在文件中才能看到哦!

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( "讀入的內容為:"? +? new? String(bytes,? 0 , len)); ???????? } ???? } }

【運行結果】:

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

?

BufferedReader的小例子

注意:?BufferedReader只能接受字符流的緩沖區,因為每一個中文需要占據兩個字節,所以需要將System.in這個字節輸入流變為字符輸入流,采用:

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

下面給一個實例:

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; /** ? * 使用緩沖區從鍵盤上讀入內容 ? * */ 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的例子吧

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 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類從文件中讀出內容

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的小例子,從文件中讀內容 ? * */ 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類

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

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

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); ???? } }

【運行結果】:

AB

合并流?SequenceInputStream

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

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; /** ? * 將兩個文本文件合并為另外一個文本文件 ? * */ 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類

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

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())); ???????? // 設置注釋 ???????? zipOut.setComment( "hello" ); ???????? int? temp =? 0 ; ???????? while ((temp = input.read()) != - 1 ){ ???????????? zipOut.write(temp); ???????? } ???????? input.close(); ???????? zipOut.close(); ???? } }

【運行結果】

運行結果之前,我創建了一個hello.txt的文件,原本大小56個字節,但是壓縮之后產生hello.zip之后,居然變成了175個字節,有點搞不懂。

不過結果肯定是正確的,我只是提出我的一個疑問而已。

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

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; /** ? * 一次性壓縮多個文件 ? * */ 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來進行表示的

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()); ???? } }

【運行結果】:

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

?

現在我們呢是時候來看看如何加壓縮文件了,和之前一樣,先讓我們來解壓單個壓縮文件(也就是壓縮文件中只有一個文件的情況),我們采用前面的例子產生的壓縮文件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; /** ? * 解壓縮文件(壓縮文件中只有一個文件的情況) ? * */ 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字節

解壓之后產生:

又回到了56字節,表示郁悶。

?

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

ZipInputStream類

當我們需要解壓縮多個文件的時候,ZipEntry就無法使用了,如果想操作更加復雜的壓縮文件,我們就必須使用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; /** ? * 解壓縮一個壓縮文件中包含多個文件的情況 ? * */ 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回退流

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); ???????????? } ???????? } ???? } }

【運行結果】:

hello(回退,) rollenholt

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

【運行結果】:

系統默認編碼為: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(); ???? } }

【運行結果】:

??

?

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

對象的序列化

對象序列化就是把一個對象變為二進制數據流的一種方法。

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

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

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

這個類就具有實現序列化能力,

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

先給一個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; /** ? * 實現具有序列化能力的類 ? * */ 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類查看:

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); ???? } }

【運行結果】

姓名:rollen??年齡:20

?

到底序列化什么內容呢?

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

Externalizable接口

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

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

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

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; ???? } ???? // 復寫這個方法,根據需要可以保存的屬性或者具體內容,在序列化的時候使用 ???? @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關鍵字進行說明:

下面舉一個例子:

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; }

【運行結果】:

姓名:null??年齡:20

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

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; /** ? * 序列化一組對象 ? * */ 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

學習Java的同學注意了!!!?
學習過程中遇到什么問題或者想獲取學習資源的話,歡迎加入Java學習交流群,群號碼:456544752 ?我們一起學Java!

轉載于:https://my.oschina.net/abcijkxyz/blog/851298

總結

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

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

日韩v欧美v日本v亚洲v国产v | 国产精品欧美一区二区三区不卡 | 91精品在线免费观看 | 日韩高清精品一区二区 | www免费| 婷婷av网站 | 激情久久五月 | 国产91综合一区在线观看 | 国产美女精品久久久 | 99九九免费视频 | 久久综合国产伦精品免费 | 国产精品久久三 | 国产高清视频 | 免费男女羞羞的视频网站中文字幕 | 国产一二三精品 | 高清av在线免费观看 | 久久视频免费看 | 麻豆国产在线视频 | 欧美另类xxx | 久久在草 | 在线播放日韩av | 波多野结衣在线观看视频 | 色香蕉在线视频 | 91麻豆精品国产91久久久久久 | 丁香婷婷社区 | 99精品国产福利在线观看免费 | 亚洲人成在线电影 | 国模视频一区二区三区 | 日韩不卡高清 | 亚洲成a人片77777潘金莲 | 9在线观看免费高清完整 | 免费成人在线观看 | 中文字幕 二区 | 国产精品久久视频 | 中文 一区二区 | 最新中文字幕在线资源 | 亚洲人在线7777777精品 | 精品国内自产拍在线观看视频 | 五月婷婷婷婷婷 | 亚洲国产免费看 | 久久综合影视 | 五月天激情综合网 | 久久免费视频99 | 精品999国产| 亚洲婷婷综合色高清在线 | 精品久久久久久综合日本 | 国产一区二区在线视频观看 | 99久久精品国产免费看不卡 | 欧美久久影院 | 在线观看色网站 | 久久黄色免费 | 香蕉影院在线播放 | 亚洲国产视频直播 | 奇米网网址 | 国内精品久久久久久久久久清纯 | 亚洲国产精品一区二区久久hs | 久久久久久久久久久久久影院 | 久久天天躁夜夜躁狠狠躁2022 | 日韩毛片在线播放 | 成年人免费观看国产 | 色婷婷国产精品一区在线观看 | 伊人精品在线 | 国产一区二区视频在线 | 韩国av一区二区三区 | a√国产免费a| 四虎国产精品永久在线国在线 | 免费久久99精品国产婷婷六月 | av一本久道久久波多野结衣 | 日韩一区二区免费播放 | 精品免费视频123区 午夜久久成人 | 不卡电影免费在线播放一区 | 精品视频在线免费观看 | 日日爱影视 | 五月天婷婷在线观看视频 | 热久久免费视频 | 日韩字幕在线观看 | 超碰成人av | 九七视频在线 | 最近中文字幕久久 | 久久香蕉影视 | 一区二区三区四区久久 | 欧美日韩一区二区在线 | 91精品视屏 | 97精品国产一二三产区 | 麻豆视频免费入口 | 亚洲国产成人在线观看 | 亚洲一区 影院 | 中文字幕乱在线伦视频中文字幕乱码在线 | 免费看一级 | www在线观看视频 | 在线成人观看 | 国产91精品一区二区麻豆网站 | 日本激情动作片免费看 | 久久伊人综合 | 免费一级片在线观看 | 日韩二级毛片 | 9色在线视频 | 久久精品国产精品亚洲精品 | 黄色国产精品 | 精品伦理一区二区三区 | 亚洲人成综合 | 2023国产精品自产拍在线观看 | 激情av在线播放 | 波多野结衣在线中文字幕 | 亚洲三级黄色 | 亚洲成年人免费网站 | 欧美精品首页 | 久久经典国产视频 | 亚洲黄a| 欧美日韩精品在线播放 | 亚洲天天干 | 亚洲黄色在线 | 欧美在线观看视频一区二区三区 | 国产精品久久久久永久免费观看 | 久久久精品久久日韩一区综合 | 人人看97| 久久免费影院 | 成年人国产视频 | 国产精品永久免费观看 | 欧美一区二区三区在线视频观看 | 亚洲蜜桃av | 黄色成人av| 日本丶国产丶欧美色综合 | 手机av电影在线观看 | 国产黄色资源 | 99精品视频精品精品视频 | 亚洲电影久久久 | 久久久精品久久 | 九九九九免费视频 | 午夜视频欧美 | 亚洲精品久久久久www | 丁香色婷 | 91久久国产自产拍夜夜嗨 | 中文视频一区二区 | 啪啪小视频网站 | 五月婷婷中文 | 久久久国产日韩 | 激情网站五月天 | 黄色视屏av | 999久久久久久久久6666 | 日韩成人在线免费观看 | 久久精品99国产精品亚洲最刺激 | 国产精品密入口果冻 | 亚洲综合欧美日韩狠狠色 | 亚洲欧美精品在线 | 日本黄色免费大片 | 超碰国产97| 激情欧美一区二区免费视频 | 亚洲国产中文在线观看 | 中文字幕在线播放av | 黄色片网站av | 国产成人精品综合久久久久99 | 亚洲精品国 | 狠狠色伊人亚洲综合网站野外 | av五月婷婷 | 97香蕉超级碰碰久久免费软件 | 欧美成人精品欧美一级乱 | 欧美一区中文字幕 | 久久撸在线视频 | 四虎影视国产精品免费久久 | 久久久麻豆精品一区二区 | 一区二区三区免费在线观看 | 日韩av免费一区 | 五月天综合色 | 欧美精品天堂 | 在线亚洲日本 | 日本免费一二三区 | 视频二区在线视频 | 久久这里有| 在线观看av麻豆 | 波多野结衣视频在线 | 五月天亚洲激情 | 国产精品久久久久久久久久久久冷 | 在线观看日韩专区 | 精品久久久久久综合日本 | 91看片淫黄大片一级在线观看 | 美女精品在线 | 亚洲闷骚少妇在线观看网站 | 亚洲综合色婷婷 | 精品国产一区二区三区久久久久久 | 日韩免费电影 | 免费日韩高清 | 日本午夜在线亚洲.国产 | 五月天天色 | 色综合久久久网 | 久久精品精品电影网 | 精品国产91亚洲一区二区三区www | 国产精品久久久久久久久久99 | 国产日韩精品在线 | 国产精品av电影 | av网站在线观看播放 | 黄色免费高清视频 | 97色综合| 国产护士av | 成人在线播放免费观看 | 国产精品99久久久久久人免费 | 精品免费在线视频 | 99久久精品国产亚洲 | 久久久免费精品国产一区二区 | 成年人免费在线观看网站 | 黄色app网站在线观看 | 天天操偷偷干 | 69欧美视频 | 久久国产精品精品国产色婷婷 | 国产高清在线永久 | 日韩特级毛片 | 久久久久久久久久免费视频 | 狠狠色综合欧美激情 | 麻豆国产精品一区二区三区 | 成人免费在线电影 | 久久免费精彩视频 | 成人午夜影院 | 亚洲国产精品电影在线观看 | 国产亚洲视频中文字幕视频 | 97看片网 | 亚洲精品视频在线观看视频 | 97电影在线看视频 | 97在线成人| 超碰97中文| 国产精品一区免费观看 | 九九在线播放 | 狠狠操欧美 | 视频在线精品 | 国产生活一级片 | 中文字幕在线视频一区 | 日本精品在线 | 在线观看午夜 | 日韩网站在线播放 | 久爱综合 | 亚洲国产一区二区精品专区 | 久久国产精品99国产 | 久精品在线| 国产伦精品一区二区三区免费 | 国产精品美女久久久久久久久久久 | 欧美激情视频在线观看免费 | 国产资源精品在线观看 | 亚洲 欧美 综合 在线 精品 | 欧美性做爰猛烈叫床潮 | 99免费看片| 久久超碰99 | 国产高清免费在线观看 | 精品视频123区在线观看 | 久久精品国产亚洲精品2020 | 91九色蝌蚪在线 | 国产精品网站一区二区三区 | 99精品欧美一区二区 | 亚洲在线视频观看 | 国产一区二区三区高清播放 | 91精品一区二区三区久久久久久 | 日韩啪啪小视频 | 在线观看av网站 | 日韩一区二区三区不卡 | 欧美另类交在线观看 | 日本高清xxxx | 日韩特级片| 日日夜夜精品免费视频 | 狠狠的操狠狠的干 | 久久激情五月丁香伊人 | 99av国产精品欲麻豆 | 玖玖玖精品 | 免费无遮挡动漫网站 | 天天操天天艹 | 欧美日韩亚洲在线观看 | 国产精品入口久久 | 91插插插免费视频 | 免费三级a | 97超碰在线久草超碰在线观看 | 亚洲电影影音先锋 | 狠狠色综合网站久久久久久久 | 国产精品嫩草影院123 | 国产精品美女免费视频 | 国产不卡在线观看 | 蜜臀aⅴ精品一区二区三区 久久视屏网 | 国产手机视频在线播放 | 精品国产中文字幕 | 狠狠操狠狠干天天操 | 亚洲国产无 | 日韩xxxxxxxxx| 日日综合网 | 一区 二区电影免费在线观看 | 国产一级在线免费观看 | 国产日韩在线视频 | 亚洲乱码久久久 | 亚洲美女在线一区 | 91精品国产福利在线观看 | 天天综合精品 | 五月婷婷六月综合 | 久久精品高清视频 | 99精品国自产在线 | 91亚洲成人 | 国内一区二区视频 | 国产传媒中文字幕 | 色综合国产 | 黄免费在线观看 | 久久8精品 | 午夜av不卡| 亚洲欧洲日韩在线观看 | 四虎影视成人永久免费观看亚洲欧美 | 天天艹天天 | 日韩色综合 | a√天堂资源 | 97中文字幕 | 日本精品一二区 | 丁香综合激情 | 国产精品乱码在线 | 国产亚洲成av人片在线观看桃 | 在线观看黄a | 超碰97成人 | 国产成人久久av免费高清密臂 | 国产精品爽爽久久久久久蜜臀 | 亚洲理论在线观看 | 在线观看国产一区二区 | 精品国产一区二区三区四区vr | 日韩影视在线观看 | 欧美成人999| 亚洲综合视频在线观看 | 日本久久高清视频 | 91麻豆精品一区二区三区 | 91视频免费播放 | 免费观看一级成人毛片 | 伊人看片| 精品一区电影国产 | 亚洲视频1 | av福利在线免费观看 | 韩国一区二区av | 欧美在线视频不卡 | 亚洲国产丝袜在线观看 | 国产专区精品视频 | 久久久国产99久久国产一 | 日韩在线观看中文 | 久久er99热精品一区二区三区 | 在线不卡视频 | 人人爱爱 | 亚洲精品视频在线观看视频 | 精品久久五月天 | www.亚洲在线 | 亚洲特级毛片 | 激情www| 精品视频免费久久久看 | 婷婷在线视频观看 | 亚洲精品美女久久 | 久久精品老司机 | 黄色中文字幕 | 亚洲一区美女视频在线观看免费 | 亚洲欧美在线综合 | 狠狠狠狠狠狠操 | 亚洲国产精品视频在线观看 | 密桃av在线| 日韩一区二区三区不卡 | 综合五月 | 欧美一区二区三区不卡 | sesese图片 | 天天草天天草 | 欧美在线91| 国产精品涩涩屋www在线观看 | 精品uu | 91成人免费视频 | 欧美一级特黄高清视频 | 五月丁色 | 91精品国产自产在线观看 | 亚洲视频资源在线 | 国产精品毛片一区视频播不卡 | 91片黄在线观看动漫 | 日本久久久久久久久久久 | 99av在线视频 | 麻豆影视网 | 在线免费视 | 黄色成人av在线 | 国产国语在线 | 免费在线观看一区二区三区 | 国产xxxx | 国产视频高清 | 男女激情片在线观看 | 亚洲视频 在线观看 | 永久免费精品视频 | 狠狠色伊人亚洲综合成人 | 免费的黄色av | 国内精品亚洲 | 91在线播放国产 | 国语自产偷拍精品视频偷 | 91探花系列在线播放 | 久热电影 | 天天射射天天 | 天天狠狠操| 国产精品一区二区久久 | 久久香蕉国产 | 中文一区在线观看 | 国产视频在线一区二区 | 激情综合色综合久久 | 久久久男人的天堂 | 精品亚洲va在线va天堂资源站 | 日韩欧美国产精品 | 永久免费观看视频 | 九九热免费观看 | 97超碰超碰久久福利超碰 | 人人草在线视频 | 亚洲精品免费在线观看 | 干狠狠| 精品久久影院 | 一区二区三区精品在线 | 国产在线观看av | 91原创在线观看 | 久草久| 色婷婷狠狠操 | 在线免费观看黄网站 | 国产视频一区在线 | 久久久高清视频 | 香蕉久久久久久av成人 | 国产中文字幕在线看 | 久久久亚洲国产精品麻豆综合天堂 | av色影院| 伊人久久精品久久亚洲一区 | 欧美俄罗斯性视频 | 亚洲综合小说电影qvod | 久操久 | 天天干天天干天天射 | 精品福利视频在线 | 黄色av电影 | 久久亚洲综合国产精品99麻豆的功能介绍 | 又黄又爽的免费高潮视频 | 91最新网址 | 精品在线播放 | 欧美精品成人在线 | 国产精品一区二区三区电影 | 激情欧美一区二区三区 | 国产精品999久久久 久产久精国产品 | 久久亚洲免费 | 久久久久久国产精品久久 | 国产成人精品av在线观 | 在线不卡视频 | 国产91大片 | 97国产超碰在线 | 在线观看免费一级片 | 欧美一区二区视频97 | 国产视频不卡一区 | 成人在线观看免费视频 | av电影免费在线 | 中文字幕一区二区三区在线播放 | 公与妇乱理三级xxx 在线观看视频在线观看 | 国产精品不卡在线观看 | 嫩嫩影院理论片 | 91在线公开视频 | 在线看成人 | 亚洲视频 中文字幕 | 亚洲老妇xxxxxx | 狠狠狠色丁香婷婷综合激情 | 美女视频黄免费的久久 | 波多野结衣精品在线 | 免费av观看 | 国产成人精品999 | 久久只精品99品免费久23小说 | 久久国产精品电影 | 亚洲午夜精品福利 | 久草电影网| 日韩高清不卡在线 | 天天超碰 | 91看片在线免费观看 | 天堂在线免费视频 | 丁香在线视频 | 麻豆成人精品视频 | 久久婷婷综合激情 | 高清在线一区 | 肉色欧美久久久久久久免费看 | 欧美日韩不卡一区 | 国产精品一区二区久久久 | 美女久久| 国产亚洲永久域名 | 五月婷婷色播 | 2000xxx影视 | 日本福利视频在线 | 亚洲国产日韩一区 | 九九欧美视频 | 99久久激情 | 久草在线免 | 精品国产aⅴ麻豆 | 国产精品中文字幕av | 一区二区三区在线免费 | 国产视频每日更新 | 91精品欧美 | 成人久久久精品国产乱码一区二区 | 国产精品免费人成网站 | 国产91丝袜在线播放动漫 | 91看国产| 久久久久久久久久电影 | 91成人网在线观看 | www.天天干.com | 特级西西www44高清大胆图片 | 国产黄a三级三级 | av网站在线免费观看 | 黄色软件在线观看免费 | av资源在线看 | 日韩中文在线视频 | 亚洲h在线播放在线观看h | 色婷婷国产精品 | 在线观看日韩精品 | 国语自产偷拍精品视频偷 | 久久免费视频在线观看 | 精品国产伦一区二区三区观看体验 | 综合婷婷丁香 | 激情欧美一区二区三区免费看 | 精品久久久久久久久久久久久 | 黄色的片子 | 国产韩国精品一区二区三区 | 亚洲欧洲av在线 | 日韩一区在线播放 | 色爽网站 | 欧美一区二区视频97 | 99久久这里有精品 | 国产精品综合久久久久 | av看片网| 欧美人人 | 狠狠狠狠狠狠操 | 国产日韩精品一区二区 | av福利在线导航 | 韩日电影在线观看 | 91成人精品一区在线播放 | 91视频免费视频 | 美女又爽又黄 | 日日天天狠狠 | 久久久久久久久久久久电影 | 91一区啪爱嗯打偷拍欧美 | 久久久亚洲麻豆日韩精品一区三区 | 深夜福利视频一区二区 | 国产高清亚洲 | 欧美成人tv | 亚洲最大的av网站 | 91高清视频在线 | 国产精品久久久久久999 | www.成人久久 | 国产一区免费视频 | 色婷婷午夜 | 天天艹| 久草视频中文在线 | 亚洲永久免费av | 日韩高清三区 | 精品视频中文字幕 | av官网| 久久精品视频在线 | 日韩在线观看你懂得 | 天天色图 | 日韩精品专区在线影院重磅 | 午夜视频在线观看一区二区三区 | 亚洲涩综合 | 美女视频黄色免费 | 中文字幕人成乱码在线观看 | 国产精品黄色在线观看 | 911精品美国片911久久久 | 天天操天天射天天插 | 在线观看成人福利 | 国产精品成久久久久 | 久久综合五月天婷婷伊人 | 久久久影院一区二区三区 | 成人午夜性影院 | 色五月激情五月 | 亚洲国产精品久久久久久 | 日韩免费福利 | 国产日韩精品在线 | 国产精品18久久久久久久久久久久 | 国产一区二区三区久久久 | 日日夜夜天天综合 | 久久成年人网站 | 国产九九九精品视频 | 激情丁香 | 丁香导航 | 欧美日韩亚洲在线 | 久操视频在线 | 亚洲精品午夜久久久久久久 | 精品美女在线视频 | 亚洲国产精品久久久久久 | 日韩中文字幕免费视频 | 丁香电影小说免费视频观看 | 国产小视频在线观看免费 | 国产精品免费观看在线 | 免费观看黄 | 国产黄色成人av | 国产97在线视频 | 日本成人免费在线观看 | 久久亚洲国产精品 | 中文字幕资源网 国产 | 国产a级片免费观看 | 国产黄色高清 | 欧美一区二区三区在线播放 | 国产精品视频资源 | 日韩免费视频一区二区 | 网站在线观看你们懂的 | 天天鲁一鲁摸一摸爽一爽 | 四虎影视成人精品国库在线观看 | 日韩大片在线观看 | 亚洲综合五月 | 91精品一区二区三区蜜臀 | 午夜精品视频一区二区三区在线看 | 手机看片中文字幕 | 精品久久网站 | av高清一区二区三区 | 国产黄色av| 欧美日韩久久一区 | 日韩精品在线免费播放 | 韩国一区二区在线观看 | 久草网视频在线观看 | 亚洲国产精品人久久电影 | 99精品视频免费观看视频 | 久久精品免费电影 | 91成人在线视频 | 久久国产精品久久国产精品 | www夜夜 | 国产美女视频免费观看的网站 | 精品国产一区二区久久 | 精品免费一区二区三区 | 999久久久免费精品国产 | 97免费在线视频 | 一级黄色片在线播放 | 婷婷丁香色| 日韩欧美国产激情在线播放 | 中文字幕xxxx| 99久久国产免费,99久久国产免费大片 | 日日夜夜网站 | 精品毛片久久久久久 | 久久国产精品免费观看 | 精品久久久久久亚洲综合网 | 久久99九九99精品 | www.狠狠色 | 亚洲一区二区三区在线看 | www.黄色片网站 | 久久久久久久电影 | 国产va精品免费观看 | 91福利在线观看 | 国产精品黑丝在线观看 | 国产玖玖精品视频 | 91色在线观看| 人人澡人摸人人添学生av | 日韩欧美国产激情在线播放 | 97视频免费| 激情小说网站亚洲综合网 | 97电影网站| 欧美午夜激情网 | 丁香影院在线 | 国产91精品一区二区 | 日韩成人精品 | 日韩网站视频 | 精品国产乱码久久久久久浪潮 | 国产成人精品久久久久 | 免费视频 三区 | 久久综合中文色婷婷 | 亚洲男男gaygay无套同网址 | 国产午夜精品久久 | 欧美一级性视频 | 国产免费视频一区二区裸体 | 96看片 | 日韩一区二区三区高清在线观看 | 久久只精品99品免费久23小说 | www.天天操| 国产自产在线视频 | 在线免费看片 | 国产男男gay做爰 | 青春草免费在线视频 | 久久夜色精品国产欧美乱极品 | 欧美日韩性 | 天天插天天狠 | 成人免费视频网站 | 欧美一级片在线观看视频 | 免费久久精品视频 | 九九九电影免费看 | 日本中文字幕在线一区 | 一区二区不卡高清 | 91在线视频精品 | 天天色.com| 亚洲国产中文字幕在线观看 | 97超碰在线资源 | 丝袜网站在线观看 | 国产精品久久久久久麻豆一区 | 在线观看成年人 | 天堂va在线观看 | 五月天天在线 | 日韩欧美视频一区二区 | 蜜臀av在线一区二区三区 | 精品国产三级 | 亚州激情视频 | 国产麻豆果冻传媒在线观看 | 日韩av图片| 欧美日韩免费观看一区二区三区 | 久久久久综合视频 | 天天撸夜夜操 | 五月婷婷激情综合网 | 蜜臀久久99精品久久久无需会员 | 久草在线精品观看 | 91视频在线观看大全 | 日日躁夜夜躁xxxxaaaa | 黄色特级毛片 | 91麻豆精品国产91久久久久久久久 | 中文字幕最新精品 | 91麻豆视频 | 亚洲影院一区 | 麻豆免费在线播放 | 久久精品国产v日韩v亚洲 | 国产精品a久久久久 | 一区中文字幕 | 欧美精品亚洲二区 | 欧美成年性 | 日韩电影在线视频 | 人人射av| 六月丁香激情网 | 黄色.com| 久久综合导航 | 亚洲精品午夜国产va久久成人 | 欧美精品免费视频 | 成年人天堂com | 麻豆视频在线免费观看 | 丁香婷婷综合网 | 亚洲日本一区二区在线 | 午夜精品福利在线 | 曰韩在线 | 超碰人人草人人 | 国产视频在线观看一区 | 99性视频 | 日日夜夜网 | 夜夜天天干 | 五月激情五月激情 | 亚洲 欧美变态 另类 综合 | 久久精品牌麻豆国产大山 | 一区二区三区免费在线 | 国产明星视频三级a三级点| 国产精品久久久久一区二区三区共 | 久久国产精品99久久久久久老狼 | 婷婷在线精品视频 | 国产主播大尺度精品福利免费 | 在线观看黄网站 | 免费看一及片 | 黄av免费在线观看 | 色综合天天干 | 五月婷婷在线观看 | 久久免费一 | 一二三区av| 91精品免费在线视频 | 午夜久久久久久久 | 在线视频 国产 日韩 | 人人干97| 国产精品久久电影观看 | 久久国产精品区 | 国产 欧美 在线 | 91九色porn在线资源 | 五月花婷婷 | 日日骑| 麻豆国产精品va在线观看不卡 | 国产一区自拍视频 | 日本中文字幕电影在线免费观看 | 亚洲一一在线 | 美女久久精品 | 日韩理论影院 | 成年人黄色大片在线 | 五月婷在线 | 天天激情综合 | 韩国av免费在线观看 | 99国产精品一区二区 | av黄色国产 | 伊人五月天婷婷 | 久久激情日本aⅴ | 三级黄色在线 | 黄在线| 中国黄色一级大片 | 国产精品黄色影片导航在线观看 | 97视频在线观看免费 | 97超碰福利久久精品 | 国产淫a| 中文区中文字幕免费看 | 国产黄色看片 | 国产精品 国内视频 | 欧洲色综合 | 国产精品剧情在线亚洲 | 丝袜一区在线 | 五月婷婷丁香六月 | 日韩精品在线免费观看 | av不卡免费在线观看 | 网站你懂的 | 国产免费av一区二区三区 | 午夜精品视频一区二区三区在线看 | 亚洲三级性片 | 精品伦理一区二区三区 | 五月婷婷综合在线视频 | 国产精品久久嫩一区二区免费 | 国产99久 | 久久久久黄| 天天色棕合合合合合合 | 天堂在线免费视频 | 激情影音先锋 | 色婷婷电影 | 久草视频在线看 | 91精品在线视频 | 欧美日韩一区二区三区视频 | 黄色精品免费 | 久久综合狠狠综合 | 久久精品亚洲精品国产欧美 | 午夜久久电影网 | 久久99国产精品免费 | 国产精品女教师 | 国产成人精品亚洲日本在线观看 | 欧美一级电影免费观看 | 精品在线视频播放 | 国产精品亚 | 91九色视频在线观看 | a久久免费视频 | 久久五月精品 | 国产精品不卡视频 | 免费a v视频 | 在线播放 日韩专区 | 天天爱天天射 | 最新av网站在线观看 | 国产精品久久久久久久久久不蜜月 | 五月婷婷亚洲 | 最近中文字幕大全中文字幕免费 | 国产资源免费 | 高清av免费一区中文字幕 | www.夜夜爽 | www.香蕉视频| 狠狠干免费 | 蜜臀一区二区三区精品免费视频 | 亚洲精品免费在线观看视频 | 国产精品一区二区三区在线播放 | 亚洲人成影院在线 | 国产精品第一页在线观看 | 五月天.com| 在线观看免费视频 | 久久久2o19精品 | av看片网 | 久久国产高清视频 | 久久久久国产视频 | 久久av在线播放 | 日本久久免费电影 | 国产日韩精品在线观看 | 亚洲作爱 | av不卡免费看 | 成人黄色电影免费观看 | 夜夜高潮夜夜爽国产伦精品 | 精品中文字幕视频 | 国产日韩欧美综合在线 | 中文字幕免费一区二区 | 久久久久国产成人精品亚洲午夜 | 97人人爽人人 | 在线a亚洲视频播放在线观看 | 91成人蝌蚪 | 国产国产人免费人成免费视频 | 国产网站色| 日日夜色 | 亚洲网站在线看 | 丁香六月在线观看 | 日韩黄色免费电影 | 亚洲国产片色 | 91av中文字幕 | 狠狠干网站 | 色综合天天色综合 | 狠狠色噜噜狠狠狠狠 | 伊人五月综合 | 成人国产精品 | 欧洲视频一区 | 在线观看91av| 超碰在线公开免费 | 911国产| 免费在线观看一区 | 国产一二三区av | 亚洲欧美少妇 | 91麻豆精品国产91久久久更新时间 | 日韩在线免费电影 | 97免费在线观看 | 天天看天天干天天操 | 亚洲精品理论片 | 日本韩国精品一区二区在线观看 | 亚洲闷骚少妇在线观看网站 | 中文av资源站 | 日韩欧美精品在线观看 | 久久综合九色综合欧美就去吻 | 亚洲国产中文字幕在线 | 亚洲一区网 | 婷婷激情在线 | 久久99国产综合精品免费 | av免费在线观看1 | 免费观看成人 | 日韩电影在线观看一区二区 | 成人久久久久久久久 | 亚洲综合成人婷婷小说 | 91污在线| 久久私人影院 | 色综合久久久久网 | 国产精品成人aaaaa网站 | 国产1级视频 | 久久久国产精品一区二区三区 | 色婷丁香 | 欧美性色综合网 | a黄色片 | 91精品国产自产在线观看永久 | 激情综合网在线观看 | 一级黄色片在线 | 欧美夫妻生活视频 | 在线视频电影 | 免费在线观看成人av | 国产一级大片免费看 | 天天爱天天 | 精品国产乱码久久久久久三级人 | 涩涩网站在线观看 | 91麻豆精品国产91久久久久 | 成人黄色毛片 | 91成人在线视频 | 插综合网| 免费在线观看日韩欧美 | 日韩视频 一区 | av电影不卡在线 | 日韩av网址在线 | 黄色三级免费网址 | 国产精品麻豆视频 | 又大又硬又黄又爽视频在线观看 | 18久久久久久 | 国产精品不卡在线 | 国产精品久久久久久久久久妇女 | 欧美日韩一级久久久久久免费看 | 人人爱在线视频 | 国产精品日韩欧美 | 日韩欧美网站 | av导航福利| 午夜久久久精品 | 狠狠久久伊人 | 国产亚洲成av人片在线观看桃 | 国产成人免费网站 | 在线观看亚洲专区 | 精品久久电影 | 成人超碰97 | 久久人人看| 不卡国产在线 | 日韩在线视频在线观看 | 亚洲激情p | 特级片免费看 | 久久a级片 | 午夜狠狠操 | 欧美专区日韩专区 | 中文字幕精品www乱入免费视频 | 色综合久久久久综合体 | 一区二区伦理电影 | 黄色的网站在线 | 久久国产精品久久w女人spa | 国产精品美女视频网站 | 天天草天天插 | 99久久国产免费,99久久国产免费大片 | 成人在线视频免费看 | 国产精品久久久久亚洲影视 | 91在线蜜桃臀| 欧美a级在线播放 | 99国内精品久久久久久久 | 黄色福利网 | 国产福利久久 | 欧美一二区在线 | av天天色| 丝袜美腿在线视频 | 日本乱码在线 | 丁香六月久久综合狠狠色 | 三三级黄色片之日韩 | 综合激情网 | 久久精品视频免费播放 | 免费a网址 | 国产不卡一二三区 | av福利在线免费观看 | 涩涩爱夜夜爱 | 99热这里只有精品国产首页 | 五月天亚洲综合 | 黄色视屏在线免费观看 | 久久久久久国产精品美女 | 亚洲综合激情 | 麻豆国产精品一区二区三区 | 亚洲经典中文字幕 | 欧美日韩综合在线观看 | 成年人在线观看网站 | 中午字幕在线观看 | 精品国产一区二区三区久久久蜜臀 | 久久久久久久久久电影 | 国产999免费视频 | 国产黄色资源 | 亚洲午夜精品久久久 | 伊人久久av | 成人av动漫在线观看 | 免费观看性生交 | 精品亚洲一区二区三区 | 久久久高清 | 日本精品久久久久中文字幕 | 亚洲精品三级 | 婷婷亚洲激情 | 午夜国产一区二区 | 亚洲成人高清在线 | 国产精品地址 | 国产精品密入口果冻 | 99热精品国产一区二区在线观看 | 国产精品毛片一区视频播不卡 | 中文字幕亚洲精品在线观看 | 五月激情片 | 精品高清美女精品国产区 | 日韩夜夜爽 | 欧美日韩在线观看不卡 | 91人人揉日日捏人人看 | 亚洲最大的av网站 | 91亚洲欧美 | 又爽又黄又刺激的视频 | 国产美女无遮挡永久免费 | 国产一区免费在线 |