這篇文章將為大家詳細(xì)講解有關(guān)Java中io流解析的示例分析,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。
在普安等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站 網(wǎng)站設(shè)計(jì)制作定制開(kāi)發(fā),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),成都全網(wǎng)營(yíng)銷推廣,外貿(mào)網(wǎng)站建設(shè),普安網(wǎng)站建設(shè)費(fèi)用合理。
IO流
Java中IO流分為兩種,字節(jié)流和字符流,顧名思義字節(jié)流就是按照字節(jié)來(lái)讀取和寫(xiě)入的,字符劉是按照字符來(lái)存取的;常用的文件讀取用的就是字符流,在網(wǎng)絡(luò)通信里面用的就是字節(jié)流
下面這張圖是Java中IO流的總體框架:
字節(jié)流
Java中字節(jié)流一般都是以stream結(jié)尾的,輸入的字節(jié)流叫InputStream,輸出字節(jié)流叫OutputStream;InputStream和OutputStream是表示自己輸入/輸出的所有類的超類,是抽象類(abstract)
常用的字節(jié)流有:
1.FileInputStream/FileOutputStream 2.BufferedInputStream/BufferedOutputStream 3.SequenceInputStream(序列流) 4.ObjectInputStream/ObjectOutputStream(對(duì)象的輸入輸出流) 5.PrintStream(打印流)
字符流
Java中輸入字符流是以Reader結(jié)尾的,輸出字符流是以Writer結(jié)尾的,比如我們常見(jiàn)的FileReader和FileWriter就是個(gè)字符流,Reader和Witer是輸入/輸出字符流的超類,也是抽象類
常用的字符流有:
1.FileReader/FileWriter 2.BufferedReader/BufferedWriter 3.InputStremReader/OutputStreamWriter(轉(zhuǎn)換流)
轉(zhuǎn)換流
轉(zhuǎn)換流就是將字節(jié)流轉(zhuǎn)換為字符流的類,有兩種:
·InputStreamReader ·OutputStreamWriter
InputStreamReader是個(gè)字符流(Reader),需要包裝一個(gè)字節(jié)流(InputStream);
OutputStreamWriter是個(gè)字符流(Writer),需要包裝一個(gè)字節(jié)流(OutputStream)
包裝(decorate)
包裝的作用的就是在原始的對(duì)象的基礎(chǔ)上增加新的功能,比如BufferedReader包裝一個(gè)Reader,實(shí)際就是對(duì)Reader功能的增強(qiáng);原始的Reader只能按照一個(gè)字符一個(gè)字符的讀取,經(jīng)過(guò)包裝之后形成的BufferedReader就具有了新的功能:直接讀取一行(readLine)的功能,直觀上說(shuō)這就是所謂的Decorate.
在設(shè)計(jì)模式上這就是典型的裝飾模式,其特點(diǎn)是:
1.裝飾對(duì)象和真實(shí)對(duì)象有相同的接口。這樣客戶端對(duì)象就能以和真實(shí)對(duì)象相同的方式和裝飾對(duì)象交互 2.裝飾對(duì)象可以在轉(zhuǎn)發(fā)這些請(qǐng)求以前或以后增加一些附加功能。這樣就確保了在運(yùn)行時(shí),不用修改給定對(duì)象的結(jié)構(gòu)就可以在外部增加附加的功能
對(duì)應(yīng)到我們上來(lái)就是,BufferedReader和Reader都是個(gè)Reader,通過(guò)包裝之后BufferedReader功能增強(qiáng),但是依然可以當(dāng)做Reader來(lái)用(OO的父類引用可以指向子類)
例子
字節(jié)流的例子
將mp3文件切割成多份數(shù),然后重新組合起來(lái)
package cn.xdian.test; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.SequenceInputStream; import java.util.Enumeration; import java.util.Vector; public class Demo2 { public static void main(String[] args) throws IOException { cutFile(); //切割MP3文件 mergeFlile(); //合并MP3文件 } //合并MP3 public static void mergeFlile() throws IOException{ File dir = new File("/home/gavinzhou/music_test"); //找到文件夾下所有的MP3文件 Vector<FileInputStream> vector = new Vector<FileInputStream>(); File[] files = dir.listFiles(); for (File file : files){ if(file.getName().endsWith(".mp3")){ vector.add(new FileInputStream(file)); } } //通過(guò)Vector獲取迭代器 Enumeration<FileInputStream> e = vector.elements(); //創(chuàng)建序列流 SequenceInputStream inputStream = new SequenceInputStream(e); //輸出流 FileOutputStream fileOutputStream = new FileOutputStream("/home/gavinzhou/conbine.mp3"); //讀取分割的MP3文件 byte[] buf = new byte[1024]; int length = 0 ; while((length = inputStream.read(buf))!=-1){ fileOutputStream.write(buf,0,length); } //關(guān)閉流 fileOutputStream.close(); inputStream.close(); } //切割MP3 public static void cutFile() throws IOException{ File file = new File("/home/gavinzhou/test.mp3"); File dir = new File("/home/gavinzhou/music_test"); //輸入字節(jié)流 FileInputStream fileInputStream = new FileInputStream(file); //讀取文件 byte[] buf = new byte[1024*1024]; int length = 0; for (int i = 0 ; (length = fileInputStream.read(buf))!=-1 ; i++){ FileOutputStream fileOutputStream = new FileOutputStream(new File(dir,"part"+i+".mp3")); fileOutputStream.write(buf,0,length); fileOutputStream.close(); } //關(guān)閉流 fileInputStream.close(); } }
字符流的例子
拷貝文件A變?yōu)槲募﨎
package cn.xidian.test; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class Demo1 { public static void main(String[] args) throws IOException { File sourceFile = new File("/home/gavinzhou/a.txt"); File desFile = new File("/home/gavinzhou/b.txt"); //創(chuàng)建輸入流 BufferedReader input = new BufferedReader(new FileReader(sourceFile)); //創(chuàng)建輸出流 BufferedWriter output = new BufferedWriter(new FileWriter(desFile)); //讀取源文件,寫(xiě)入到新的文件 String line = null; while((line = input.readLine()) != null){ output.write(line); output.newLine(); } //關(guān)閉輸入輸出流 input.close(); output.close(); } }
打印流的例子
package cn.xidian.test; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.PrintStream; /* 打印流可以打印任意類型的數(shù)據(jù),打印數(shù)據(jù)之前都會(huì)先把數(shù)據(jù)轉(zhuǎn)換成字符串再進(jìn)行打印 */ class Animal{ String name; String color; public Animal(String name,String color){ this.name = name; this.color = color; } @Override public String toString() { return "名字:"+this.name+ " 顏色:"+ this.color; } } public class Demo6 { public static void main(String[] args) throws IOException { /* File file = new File("/home/gavinzhou/a.txt"); //創(chuàng)建打印流 PrintStream printStream = new PrintStream(file); //打印任何信息到文件中 printStream.println(97); printStream.println(3.14); printStream.println('a'); printStream.println(true); Animal a = new Animal("老鼠", "黑色"); printStream.println(a); //更改標(biāo)準(zhǔn)的輸入輸出 System.setOut(printStream); //標(biāo)準(zhǔn)輸出是到屏幕上 System.out.println("test......."); */ //收集異常的日志信息。 File logFile = new File("/home/gavinzhou/test.log"); PrintStream logPrintStream = new PrintStream( new FileOutputStream(logFile,true) ); try{ int c = 4/0; //引起異常 System.out.println("c="+c); int[] arr = null; System.out.println(arr.length); } catch(Exception e){ e.printStackTrace(logPrintStream); //輸出到文件而不是屏幕上 } } }
關(guān)于“Java中io流解析的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。
當(dāng)前標(biāo)題:Java中io流解析的示例分析
當(dāng)前地址:http://www.chinadenli.net/article6/jdhjog.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、建站公司、品牌網(wǎng)站設(shè)計(jì)、外貿(mào)網(wǎng)站建設(shè)、微信公眾號(hào)、Google
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
移動(dòng)網(wǎng)站建設(shè)知識(shí)