一、IO流概述
Java中的IO(Input/Output)流指的是能夠在程序中讀寫數據的一類流。Java中的IO流分為位元組流和字元流兩種類型,其中位元組流以位元組為單位進行讀寫操作,字元流以字元為單位進行讀寫操作。IO流的輸入和輸出,一般以程序為中心,向外讀寫,或從外面讀寫入程序。
在Java程序中,IO流主要包含兩個大類:輸入流和輸出流。其中輸入流主要用於從外部數據源讀取數據,輸出流主要用於向外部數據源寫入數據。
二、IO流的分類
Java的IO流可以根據不同的角度進行分類:
1.按讀寫數據類型分類
Java中的IO流分為位元組流和字元流兩種類型。其中位元組流(InputStream和OutputStream)以位元組為單位進行讀寫操作,字元流(Reader和Writer)以字元為單位進行讀寫操作。位元組流適用於任何類型的數據,而字元流只適用於文本類型的數據。
2.按數據處理位置分類
Java中的IO流分為節點流和處理流兩種類型。其中節點流(FileInputStream/FileOutputStream等)是直接與數據源相連的流,而處理流(BufferedInputStream/BufferedOutputStream等)則依靠節點流來實現數據處理。處理流可對數據進行緩衝、轉化和過濾等操作。
3.按數據操作方式分類
Java中的IO流分為位元組流(InputStream和OutputStream)和字元流(Reader和Writer)兩種不同類型的操作方式。位元組流適用於任何類型的數據,而字元流只適用於文本類型的數據。
三、IO流的使用方法
1.位元組流的使用
Java中的位元組流主要有FileInputStream和FileOutputStream兩個節點流和BufferedInputStream、BufferedOutputStream等處理流,以下是一個簡單的讀取本地文件的示例:
public class FileReaderTest {
public static void main(String[] args) throws IOException {
File file = new File("C:/test.txt");
InputStream inputStream = new FileInputStream(file);
byte[] bytes = new byte[inputStream.available()];
inputStream.read(bytes);
inputStream.close();
System.out.println(new String(bytes));
}
}
上述代碼中,我們創建了一個文件輸入流,並使用available()方法獲取文件大小,然後創建一個位元組數組存儲文件內容,並使用read()方法讀取文件的所有內容。最後利用String構造函數將位元組數據轉換為字元串並進行輸出。
2.字元流的使用
字元流主要包括FileReader和FileWriter兩個節點流和BufferedReader、BufferedWriter等處理流,以下是一個使用BufferedReader讀取文件內容的示例:
public class BufferedReaderTest {
public static void main(String[] args) throws IOException {
File file = new File("C:/test.txt");
Reader reader = new FileReader(file);
BufferedReader bufferedReader = new BufferedReader(reader);
String line = null;
while ((line = bufferedReader.readLine()) != null) {
System.out.println(line);
}
bufferedReader.close();
reader.close();
}
}
上述代碼中,我們創建了一個字元輸入流BufferedReader,並用它來讀取文件test.txt的內容,並在控制台上一行行地輸出文件內容。
3.處理流的使用
處理流可以對節點流進行緩衝、轉化和過濾等操作,這樣可以提高IO的效率。BufferedInputStream和BufferedOutputStream是位元組流的緩衝處理流,BufferedReader和BufferedWriter是字元流的緩衝處理流,以下是一個使用BufferedWriter寫入文件的示例:
public class BufferedWriterTest {
public static void main(String[] args) throws IOException {
File file = new File("C:/test.txt");
Writer writer = new FileWriter(file);
BufferedWriter bufferedWriter = new BufferedWriter(writer);
bufferedWriter.write("Hello World!");
bufferedWriter.newLine();
bufferedWriter.flush();
bufferedWriter.close();
writer.close();
}
}
上述代碼中,我們創建了一個字元輸出流BufferedWriter,並向文件test.txt寫入字元串”Hello World!”,然後再寫入一個換行符,接著使用flush()方法刷新緩衝區,最後關閉輸出流。
四、IO流的注意事項
1.關閉流
打開的流需要關閉,否則可能會造成資源佔用和內存泄漏問題。流的關閉順序應該與創建的順序相反。例如,如果創建了一個輸出流和一個輸入流,則應先關閉輸入流,再關閉輸出流。
2.使用緩衝
IO流的操作是比較耗時的,因此應該儘可能使用緩衝來提高效率。在使用處理流時,不要忘記對緩衝區進行flush()操作,否則數據可能不會被寫入文件中。
3.異常處理
在使用IO流時,應該了解可能出現的異常情況,並對異常進行處理。通常使用try-catch語句可以有效地捕獲和處理異常情況。
4.路徑的寫法
在Java中,文件路徑可以寫成絕對路徑或相對路徑的形式。絕對路徑通常以盤符開頭(如C:\),而相對路徑通常指相對於Java程序所在的當前路徑。
五、總結
Java的IO流是Java編程中的重要內容,位元組流和字元流有不同的使用場景,利用緩衝處理流可以有效地提高IO的效率,同時需要注意流的關閉、緩衝區的刷新和異常處理等事項。
原創文章,作者:ZSTFB,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/371489.html