Java文件流操作

文件流的分類

1. 字節流

所有字節流實現類都繼承自抽象類InputStream和OutputStream,下面是一些常用的字節流(輸入流和輸出流都是一一對應的)

  • FileInputStream:實現對文件字節的讀取操作
  • ByteArrayInputStream:把內存中的一個緩衝區作爲輸入源,從內存數組中讀取數據字節(一般用來操作用戶的輸入)。
  • ObjectInputStream:將用ObjectOutputStream寫入的的文件讀取出來,序列化的類應實現Serializable接口
  • PipeInputStream:實現了管道的概念,從線程通道中讀取線程字節。主要在線程中使用,用於兩個線程間通信。
  • SequenceInputStream:表示其他輸入流的邏輯串聯。它從輸入流的有序集合開始,並從第一個輸入流開始讀取,直到到達文件末尾,接着從第二個輸入流讀取,依次類推,直到到達包含的最後一個輸入流的文件末尾爲止。
  • System.in:從用戶控制檯讀取數據字節,在System類中,in是 InputStream 類的靜態導入。
	// 獲取輸入流
	InputStream fis = new FileInputStream("D:/a.png");	
	// 獲取輸出流
	OutputStream fos = new FileOutputStream("D:/b.png");	
	// 臨時存放字節的數組
	byte[] bytes = new byte[1024];
	// 檢查是否到達文件尾(字節流到達文件爲返回-1)
	int i;
	while ((i = fis.read(bytes)) != -1){
		// 實際上底層都是調用write(bytes, 0, bytes.length())
		fos.write(bytes);		
	}
	// 關閉輸入流
	fis.close();
	// 關閉輸出流
	fos.close();

2. 字符流

字符流和字節流使用基本相同,只不過字符流都是繼承自抽象類Reader和Writer(一般用來處理文本文件)

	Reader reader = new FileReader("D:/a.txt");
	Writer writer = new FileWriter("D:/b.txt");
	char[] chars = new char[1024];
	int i;
	while ((i = reader.read(chars)) != -1){
		writer.write(chars);
	}
	writer.flush();
	
	reader.close();
    writer.close();

3. 緩衝流

字節流和字符流都是直接對文件源進行操作(文件—》程序—》文件),這樣會受制於硬盤的讀寫速度,緩衝流則是把流讀出的數據先緩存到內存中,等達到緩衝區指定大小或執行flush操作時,將數據一次性寫入文件

  • 字節緩衝流
	BufferedInputStream bis = new BufferedInputStream(new FileInputStream("D:/a.txt"));
	BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("D:/b.txt"));
	byte[] bytes = new byte[2048];
	int i;
	while ((i = bis.read(bytes)) != -1){
		// 底層都是調用write(byte[] b, int off, int len)方法,循環寫入bytes
		bos.write(bytes);   
		// 刷新緩衝區的輸出流,使所有緩衝的輸出字節寫出到底層輸入流
		bos.flush();    
	}
	bis.close();
	bos.close();
  • 字符緩衝流
BufferedReader br = new BufferedReader(new FileReader("D:/a.txt"));
BufferedWriter bw = new BufferedWriter(new FileWriter("D:/b.txt"));
String line;
while ((line = br.readLine()) != null){
	// 寫入一行
    bw.write(line);  
    // 換行
    bw.newLine();   
}
br.close();
bw.close();

參考:https://www.cnblogs.com/jmcui/p/9096536.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章