導讀
本文適合Java入門,不太適合Java中高級軟件工程師。本文以《Java語言程序設計基礎》第10版為藍本,採用不斷提出問題,然後解答問題的方式來講述。本篇文章只是這個系列中的一篇,如果你喜歡這種講解方式,或者覺得從中能學到知識,可以關注我,以便查閱本系列其他文章。
讓我們開始愉快地學習Java語言吧!
1流類層次結構圖
由於輸入輸出流類眾多,剛開始就分別介紹輸入輸出流相關類會顯得很混亂。所以先給出所有的流類層次結構圖,其中在JDK 1.8中有兩個類:StringBufferInputStream和LineNumberInputStream
已經棄用了,沒有列到圖中。
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方法,分別傳遞文件名和路徑給這個方法,運行這個示例,然後對比看看結果的不同之處。
運行結果為:
3讀寫文本文件
上面講了File類,它代表了文件或目錄,但是它不提供讀寫文件的方法,那麼如何讀寫文件呢?
3.1 Scanner讀取文本文件
下面舉幾個例子,使用的文本文件為:
1)按行讀取
2) 使用hasNext和next
3)按類型讀取
4)設置分隔符
但是與hasNextLine和nextLine一起用則不起作用,因為他們以換行符為分隔符。
上面提到換行分隔符,但沒有給出定義,那麼什麼是換行分隔符呢?
鍵盤上的Enter鍵對應換行分隔符。換行分隔符字符串是由系統定義的,在 Windows平臺上\\r\\n,而在UNIX平臺上是\\n。為了得到特定平臺上的行分隔符,使用
String lineSeparator = System.getProperty(“line.separator”);
3.2使用String讀取文件
注意小文件可以使用這種方法。
3.3使用Files的靜態方法readAllLines
3.4大文件讀寫
默認的是以UTF-8編碼方式讀取文本,還可以指定編碼方式:
public static Stream<string> lines(Path path, Charset cs)/<string>
StandardCharsets中定義了編碼類型,我們可以使用它來指定編碼類型
3.5使用PrintWriter
向一個文件中寫入數據的例子如下:
閱讀更多 甜橙很酸 的文章