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

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

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - Java進階教程之IO基礎

Java進階教程之IO基礎

2019-11-27 15:08Vamei JAVA教程

這篇文章主要介紹了Java進階教程之IO基礎,這里只是對Java IO的基本介紹,包含讀取和寫入等操作,需要的朋友可以參考下

計算機最重要的功能是處理數據。一個有用的計算機語言需要擁有良好的IO功能,以便讓未處理的數據流入程序,讓已處理的數據流出。

與其他語言相比,Java的IO功能顯得復雜。在其他語言中,許多IO功能(比如讀取文件),是被封裝好的,可以用一兩行程序實現。在Java中,程序員往往需要多個層次的裝飾(decoration),才能實現文件讀取。

相對的復雜性帶來的好處是IO的靈活性。在Java中,程序員可以控制IO的整個流程,從而設計出最好的IO方式。我們將在下文看到更多。

 IO示例

 下面是我用于演示的文件file.txt

?
1
2
Hello World!
Hello Nerd!

我們先來研究一個文件讀取的例子:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import java.io.*;
 
public class Test
{
  public static void main(String[] args)
  {
    try {
      BufferedReader br =
       new BufferedReader(new FileReader("file.txt"));
 
      String line = br.readLine();
 
      while (line != null) {
        System.out.println(line);
        line = br.readLine();
      }
      br.close();
    }
    catch(IOException e) {
      System.out.println("IO Problem");
    }
  }
}

這段程序中包含一個try...catch...finally的異常處理器。可參考Java進階教程之 異常處理

 裝飾器與功能組合

程序IO的關鍵在于創建BufferedReader對象br:

?
1
BufferedReader br = new BufferedReader(new FileReader("file.txt"));

在創建的過程中,我們先建立了一個FileReader對象,這個對象的功能是從文件"file.txt"中讀取字節(byte)流,并轉換為文本流。在Java中,標準的文本編碼方式為unicode。BufferedReader()接收該FileReader對象,并拓展FileReader的功能,新建出一個BufferedReader對象。該對象除了有上述的文件讀取和轉換的功能外,還提供了緩存讀取(buffered)的功能。最后,我們通過對br對象調用readLine()方法,可以逐行的讀取文件。

(緩存讀取是在內存中開辟一片區域作為緩存,該區域存放FileReader讀出的文本流。當該緩存的內容被讀走后(比如readLine()命令),緩存會加載后續的文本流。)

BufferedReader()是一個裝飾器(decorator),它接收一個原始的對象,并返回一個經過裝飾的、功能更復雜的對象。修飾器的好處是,它可以用于修飾不同的對象。我們這里被修飾的是從文件中讀取的文本流。其他的文本流,比如標準輸入,網絡傳輸的流等等,都可以被BufferedReader()修飾,從而實現緩存讀取。

 下圖顯示了br的工作方式,數據自下而上流動:

 Java進階教程之IO基礎

上述的裝飾過程與Linux中的文本流思想很相似。在Linux中,我們使用類似函數的方式來處理和傳遞文本流。在Java中,我們使用了裝飾器。但它們的目的都類似,就是實現功能的模塊化和自由組合。

 更多的組合

事實上,Java提供了豐富的裝飾器。FileReader中合并了讀取和轉換兩個步驟,并采用了常用的默認設置,比如編碼采取unicode。我們可以使用FileInputStream + InputStreamReader的組合來替代FileReader,從而分離讀取字節和轉換兩個步驟,并對兩個過程有更好的控制。

(當然,FileReader的使用更加方便。InputStreamReader是將FileInputStream轉換成一個Reader,用于處理unicode文本)

Java進階教程之IO基礎

箭頭表示數據流動方向

 流的讀寫來自于四個基類: InputStream, OutputStream, Reader和Writer。InputStream和Reader是處理讀取操作,OutputStream和Writer是處理寫入操作。它們都位于java.io包中。繼承關系如下:

Java進階教程之IO基礎

 java.io

 此外,IOException有如下衍生類:

Java進階教程之IO基礎

IOException

 Reader和Writer及其衍生類是處理unicode文本。如我們看到的Buffered Reader, InputStreamReader或者FileReader。

InputStream和OutputStream及其衍生類是處理字節(byte)流。計算機中的數據都可以認為是字節形式,所以InputStream和OutputStream可用于處理更加廣泛的數據。比如我們可以使用下面的組合來讀取壓縮文件中包含的數據(比如整數):

Java進階教程之IO基礎

箭頭表示數據流動方向

 我們從壓縮文件中讀出字節流,然后解壓縮,最終讀出數據。

 寫入

寫入(write)操作與讀取操作相似。我們可以通過使用裝飾,實現復雜的寫入功能。這里是一個簡單的寫入文本的例子:

?
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.*;
 
public class Test
{
  public static void main(String[] args)
  {
    try {
      String content = "Thank you for your fish.";
 
      File file = new File("new.txt");
 
      // create the file if doesn't exists
      if (!file.exists()) {
        file.createNewFile();
      }
 
      FileWriter fw = new FileWriter(file.getAbsoluteFile());
      BufferedWriter bw = new BufferedWriter(fw);
      bw.write(content);
      bw.close();
 
    }
    catch(IOException e) {
      System.out.println("IO Problem");
    }
  }
}

上面創建了file對象,用于處理文件路徑。

總結

這里只是對Java IO的基本介紹。Java的IO相對比較復雜。Java程序員需要花一些時間來熟悉java.io中的類及其功能。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产91素人搭讪系列天堂 | 欧美日韩国产中文字幕 | 亚洲精品成人在线 | 奇米影视久久777中文字幕 | 第一福利在线导航 | 大乳孕妇一级毛片 | 春色视频网站 | 91精品国产综合久久福利 | 四虎海外影院 | 国产一区二区在线看 | 热99re久久精品精品免费 | 日本男男gaygays | 无码区国产区在线播放 | 国产视频一区二 | 99久久国产综合精品网成人影院 | 色女的乖男人 | 欧美日韩国产成人综合在线影院 | 好男人好资源在线观看免费 | 欧美精品久久久久久久影视 | 国产99精品成人免费视频 | 日本护士厕所xxx | 精品国产一区二区三区久久久狼 | 美女福利视频午夜在线 | 色婷婷狠狠 | 韩国三级 720p | 日本免费一区二区三区a区 日本免费三片在线观看 | 99视频精品国在线视频艾草 | 国产99er66在线视频 | 日本69av | 国产免费久久精品 | 日韩一区二区三区四区区区 | 星空无限传媒xk8046 | 精品AV无码一二三区视频 | xxxxx性中国hd | 性趣味商品推荐 | 北岛玲亚洲一区在线观看 | 精品视频免费在线 | 99爱在线观看精品视频 | 99久久免费国产精品热 | 攻插受| 欧美专区视频 |