一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java中io流解析及代碼實例

Java中io流解析及代碼實例

2021-03-15 13:28GavinZhou_xd Java教程

這篇文章主要介紹了Java中io流解析及代碼實例,具有一定借鑒價值,需要的朋友可以參考下

IO流

Java中IO流分為兩種,字節流字符流,顧名思義字節流就是按照字節來讀取和寫入的,字符劉是按照字符來存取的;常用的文件讀取用的就是字符流,在網絡通信里面用的就是字節流

下面這張圖是Java中IO流的總體框架:

Java中io流解析及代碼實例

字節流

Java中字節流一般都是以stream結尾的,輸入的字節流叫InputStream,輸出字節流叫OutputStream;InputStream和OutputStream是表示自己輸入/輸出的所有類的超類,是抽象類(abstract)

常用的字節流有:

?
1
2
3
4
5
1.FileInputStream/FileOutputStream
2.BufferedInputStream/BufferedOutputStream
3.SequenceInputStream(序列流)
4.ObjectInputStream/ObjectOutputStream(對象的輸入輸出流)
5.PrintStream(打印流)

字符流

Java中輸入字符流是以Reader結尾的,輸出字符流是以Writer結尾的,比如我們常見的FileReader和FileWriter就是個字符流,Reader和Witer是輸入/輸出字符流的超類,也是抽象類

常用的字符流有:

?
1
2
3
1.FileReader/FileWriter
2.BufferedReader/BufferedWriter
3.InputStremReader/OutputStreamWriter(轉換流)

轉換流

轉換流就是將字節流轉換為字符流的類,有兩種:

?
1
2
·InputStreamReader
·OutputStreamWriter

InputStreamReader是個字符流(Reader),需要包裝一個字節流(InputStream);

OutputStreamWriter是個字符流(Writer),需要包裝一個字節流(OutputStream)

包裝(decorate)

包裝的作用的就是在原始的對象的基礎上增加新的功能,比如BufferedReader包裝一個Reader,實際就是對Reader功能的增強;原始的Reader只能按照一個字符一個字符的讀取,經過包裝之后形成的BufferedReader就具有了新的功能:直接讀取一行(readLine)的功能,直觀上說這就是所謂的Decorate.

在設計模式上這就是典型的裝飾模式,其特點是:

?
1
2
1.裝飾對象和真實對象有相同的接口。這樣客戶端對象就能以和真實對象相同的方式和裝飾對象交互
2.裝飾對象可以在轉發這些請求以前或以后增加一些附加功能。這樣就確保了在運行時,不用修改給定對象的結構就可以在外部增加附加的功能

對應到我們上來就是,BufferedReader和Reader都是個Reader,通過包裝之后BufferedReader功能增強,但是依然可以當做Reader來用(OO的父類引用可以指向子類)

例子

字節流的例子

將mp3文件切割成多份數,然后重新組合起來

?
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
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));
            }
        }
        //通過Vector獲取迭代器
        Enumeration<FileInputStream> e = vector.elements();
        //創建序列流
        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);
        }
        //關閉流
        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");
        //輸入字節流
        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();
        }
        //關閉流
        fileInputStream.close();
    }
}

字符流的例子

拷貝文件A變為文件B

?
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
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");
        //創建輸入流
        BufferedReader input = new BufferedReader(new FileReader(sourceFile));
        //創建輸出流
        BufferedWriter output = new BufferedWriter(new FileWriter(desFile));
        //讀取源文件,寫入到新的文件
        String line = null;
        while((line = input.readLine()) != null){
            output.write(line);
            output.newLine();
        }
        //關閉輸入輸出流
        input.close();
        output.close();
    }
}

打印流的例子

?
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
package cn.xidian.test;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;
/*
打印流可以打印任意類型的數據,打印數據之前都會先把數據轉換成字符串再進行打印
 */
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");
  //創建打印流
  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);
  //更改標準的輸入輸出
  System.setOut(printStream); //標準輸出是到屏幕上
  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);
            //輸出到文件而不是屏幕上
        }
    }
}

總結

以上就是本文關于Java中io流解析及代碼實例的全部內容,希望對大家有所幫助。如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!

原文鏈接:http://blog.csdn.net/gavin__zhou/article/details/52090071

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 侵犯小男生免费视频网站 | 日本不卡一区二区三区在线观看 | 日韩天堂在线 | 五月天婷婷网亚洲综合在线 | 精品国产精品国产偷麻豆 | 亚洲精品第二页 | 97在线资源站 | 欧美在线观看一区二区三 | 国产乱码一卡二卡3卡四卡 国产乱插 | 亚洲精品午夜级久久久久 | 男人吃奶动态图 | 国产成人成人一区二区 | 亚洲国产成人久久综合一 | 动漫女性扒开尿口羞羞漫画 | 天堂色 | 国产一区二区在线看 | 国产精品天天影视久久综合网 | 青柠在线完整高清观看免费 | 欧美日韩视频一区三区二区 | 国产精品va在线观看手机版 | 9久热久爱免费精品视频在线观看 | 母乳在线 | a国产在线 | 日本大片免a费观看在线 | 成人精品第一区二区三区 | 天天色天天色天天色 | 午夜特级毛片 | 免费精品99久久国产综合精品 | 国产自拍视频网站 | naruto hentai玖辛奈 | 国产五月天在线 | 国产91素人搭讪系列天堂 | 欧洲男同直粗无套播放视频 | 天天做天天爰夜夜爽 | 潘甜甜在线观看 | 色老女人| 女八把屁股扒开让男生添 | 天堂网站天堂小说 | 性bbbb妇女激情 | 国产激情视频网站 | 四虎影院永久在线 |