解決專案node版本不支援,windows多版本的node切換
什麼是IO
I:Input
O:Output
通過IO可以完成硬碟檔案的讀和寫。
IO流的分類
有多種分類方式:
-
按照流的方向:以記憶體作為參照物
往記憶體中去,叫做輸入(Input),或者叫做寫(read)。
往記憶體中出來,叫做輸出(Output),或者叫做寫(Write)
。 -
按照讀取資料方式:
有的流是按照位元組的方式讀取資料,一次讀取1個位元組byte,等同於一次讀取8個二進位制位。
這種流是萬能的,什麼型別的流都能讀取。包括:文字檔案,圖片,聲音檔案,檢視檔案,視訊檔案等…
這種流稱為
位元組流
位元組流直接讀取的是8個二進位制位
假設有檔案file1.txt,採用位元組流的讀取方式:
a中國bc張三fe
第一次讀:一個位元組,正好讀到‘a’(‘a’字元在Windows系統中佔1個位元組,java中佔2個位元組)
第二次讀:一個位元組,正好讀到‘中’字元的一半。(‘中’字元在Windows系統中佔2個位元組,在Java中佔4個位元組)
第三次讀:一個自己,正好讀到‘中’字元的另外一半。
有的流是按照字元的方式讀取資料,一次讀取一個字元,這種流是為了方便讀取普通文字檔案而存在的,這種流不能讀取:圖片,聲音,視訊等檔案。只能讀取純文字檔案,連word檔案都無法讀取。word檔案不是普通檔案。
這種流稱為
字元流
字元流可以一個字元一個字元讀取
假設有檔案file1.txt,採用字元流的讀取方式:
a中國bc張三fe
第一次讀:一個位元組,正好讀到‘a’
第二次讀:一個位元組,正好讀到‘中’字元。
專門為普通文字提供的流
-
Java中IO流已經寫好,只需要呼叫即可
Java中所有的流都是在:Java.io.*下。
Java中主要還是研究:
怎麼new流物件。呼叫流物件的哪個方法是讀,那個方法是寫。
流的四大家族
四大首領(全抽象類abstract class)
java.io.InputStream 位元組輸入流
java.io.OutputStream 位元組輸出流
java.io.Reader 字元輸入流
java.io.Writer 字元輸出流
所有的流都實現了:java.io.Closeable介面,都是可關閉的,都有close()方法。
流畢竟只是一個管道,這個是記憶體和硬碟之間的通道,用完之後一定要關閉,不然會耗費很多資源。
所有的輸出流都實現了:java.io.Flushable介面,都是可重新整理的,flush()方法。
養成一個好習慣,輸出流在最終輸出以後,一定要記得flush()重新整理一下。這個重新整理表示將通道/管道當中剩餘為輸出的資料強行輸出完,重新整理的作用就是清空管道。
全部寫入到檔案當中。
注意:如果沒有flush()可能會導致丟失資料
注意:在Java中只要類名
以stream結尾的都是位元組流。以Reader/Writer結尾的都是字元流(比如InputStreamReader就是字元流,因為是Reader結尾)
需要掌握的16個流
檔案專屬:
java.io.FileInputStream
java.io.FileOutputStream
java.io.FileReader
java.io.FileWriter
轉換流:(將位元組流轉換成字元流)
java.io.InputStreamReader
java.io.OutputStreamWriter
緩衝流專屬:
java.io.BufferInputStream
java.io.BufferOutputStream
java.io.BufferReader
java.io.BufferWriter
資料流專屬:
java.io.DataInputStream
java.io.DataOutputStream
標準輸出流:
java.io.printWriter
java.io.printStream
物件流專屬:
java.io.ObjectInputStream
java.io.ObjectOutputStream