愉快地學Java語言:第十六章 輸入與輸出 第1講

導讀

本文適合Java入門,不太適合Java中高級軟件工程師。本文以《Java語言程序設計基礎》第10版為藍本,採用不斷提出問題,然後解答問題的方式來講述。本篇文章只是這個系列中的一篇,如果你喜歡這種講解方式,或者覺得從中能學到知識,可以關注我,以便查閱本系列其他文章。

愉快地學Java語言:第十六章 輸入與輸出 第1講

讓我們開始愉快地學習Java語言吧!

1流類層次結構圖

由於輸入輸出流類眾多,剛開始就分別介紹輸入輸出流相關類會顯得很混亂。所以先給出所有的流類層次結構圖,其中在JDK 1.8中有兩個類:StringBufferInputStreamLineNumberInputStream

已經棄用了,沒有列到圖中。

愉快地學Java語言:第十六章 輸入與輸出 第1講

愉快地學Java語言:第十六章 輸入與輸出 第1講

愉快地學Java語言:第十六章 輸入與輸出 第1講

愉快地學Java語言:第十六章 輸入與輸出 第1講

2File類

我們如何表示一個文件或目錄呢?

我們使用File類來表示一個文件或目錄,File類是文件名及其目錄路徑的一個包裝類,實例化一個File並不會在磁盤上創。File沒有提供文件讀寫的方法,下面列舉File類提供的一些常用方法:

public File(String pathname) :pathname可以是目錄或文件路徑。

public File(String parent, String child):parent為父目錄,child為子目錄

parent可以為null,但如果child為null,那麼將拋出類型為NullPointerException的異常。

構造方法就列舉這兩個,其他構造方法大同小異,我們可以查看API文檔或直接查看源碼。下面寫一些示例,加深對概念的理解。如下所示,定義了testFile方法,分別傳遞文件名和路徑給這個方法,運行這個示例,然後對比看看結果的不同之處。

愉快地學Java語言:第十六章 輸入與輸出 第1講

愉快地學Java語言:第十六章 輸入與輸出 第1講

運行結果為:

愉快地學Java語言:第十六章 輸入與輸出 第1講

3讀寫文本文件

上面講了File類,它代表了文件或目錄,但是它不提供讀寫文件的方法,那麼如何讀寫文件呢?

3.1 Scanner讀取文本文件

下面舉幾個例子,使用的文本文件為:

愉快地學Java語言:第十六章 輸入與輸出 第1講

1)按行讀取

愉快地學Java語言:第十六章 輸入與輸出 第1講

2) 使用hasNext和next

愉快地學Java語言:第十六章 輸入與輸出 第1講

3)按類型讀取

愉快地學Java語言:第十六章 輸入與輸出 第1講

4)設置分隔符

愉快地學Java語言:第十六章 輸入與輸出 第1講

但是與hasNextLine和nextLine一起用則不起作用,因為他們以換行符為分隔符。

上面提到換行分隔符,但沒有給出定義,那麼什麼是換行分隔符呢?

鍵盤上的Enter鍵對應換行分隔符。換行分隔符字符串是由系統定義的,在 Windows平臺上\\r\\n,而在UNIX平臺上是\\n。為了得到特定平臺上的行分隔符,使用

String lineSeparator = System.getProperty(“line.separator”);

3.2使用String讀取文件

注意小文件可以使用這種方法。

愉快地學Java語言:第十六章 輸入與輸出 第1講

3.3使用Files的靜態方法readAllLines

愉快地學Java語言:第十六章 輸入與輸出 第1講

3.4大文件讀寫

愉快地學Java語言:第十六章 輸入與輸出 第1講

默認的是以UTF-8編碼方式讀取文本,還可以指定編碼方式:

public static Stream<string> lines(Path path, Charset cs)/<string>

StandardCharsets中定義了編碼類型,我們可以使用它來指定編碼類型

3.5使用PrintWriter

向一個文件中寫入數據的例子如下:

愉快地學Java語言:第十六章 輸入與輸出 第1講


分享到:


相關文章: