java輸入輸出流(字符)

輸入輸出流的概念
在java中,對信息的輸入與輸出都抽象爲 流 的概念。
輸入流:數據由外界輸入到程序中
輸出流:數據由程序輸出到外界

java 常見預定義的I/O流類:
在這裏插入圖片描述

從流的方向劃分:
輸入流
輸出流
從流的分工劃分:
	節點流(真正訪問文件,進行進行輸入輸出操作的流)
	處理流(在節點流的基礎上,對數據進行加工、轉化、處理的流)
從流的內容劃分:
	面向字符的流(專門用於處理字符數據,如文本文件,可以實現內部格式和文本文件的外部格式之間轉換):Reader、Writer
	面向字節的流(用於一般目的,如音頻、視頻、圖像等文件,以二進制流傳輸):InputStream、OutputStream
	
面向字符流的抽象基類Reader和Writer(對文本進行編碼,有效防止亂碼)
	多數程序使用這兩個抽象類的一系列子類來讀入/寫出文本信息,例如FileReader/FileWriter
	
面向字節流的抽象基類InputStream和OutputStream(二進制存儲,效率高,空間小)
	程序使用這兩個類的子類來讀寫字節信息

讀/寫字符流
FileWriter寫案例:

public class FileWriterTest {
	public static void main(String[] args) throws IOException {
		String fileName = "hi.txt";
		FileWriter fileWriter = new FileWriter(fileName, true); 
		fileWriter.write("hi\n");
		fileWriter.write("this is a java program!");
		fileWriter.close();
	}
}
涉及方法:
	FileWriter("fileName",boolean),第一個參數是打開文件的名稱,第二個參數(可選)設置覆蓋(false)或者追加(true),默認爲false
	write(content),將內容寫入的文件
	
FileWriter缺點:當寫入大量內容的時候,效率不高,而且使用 \n 另起一行,對於不同系統,可能顯示不一致,導致排版出錯
BufferedWriter類可以解決FileWriter類的缺點:效率比FileWriter高,而且比FileWriter多了newLine()方法進行換行

BufferedWriter類寫案例:

public class BufferWriterTest {
	public static void main(String[] args) throws IOException {
		String fileName = "./hi2.txt";
		FileWriter fileWriter = new FileWriter(fileName, true);
		BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
		bufferedWriter.write("hi");
		bufferedWriter.newLine();
		bufferedWriter.write("this is BufferedWriter!");
		//關閉bufferedWriter即可
		bufferedWriter.close();
	}
}

涉及方法:
BufferedWriter類與FileWriter類的方法基本一樣,只是多了newLine()方法
BufferedWriter是建立在FileWriter上的,BufferedWriter構造方法參數爲FileWriter對象,但是只需要關閉流只需要關閉BufferedWriter

讀文本文件的相關類:
FileReader類(繼承自InputStreamReader):
read()方法一個字符一個字符地讀並返回當前字符的int類型,輸出須轉換爲char類型,文本末尾返回-1。

public class FileReaderTest {
	public static void main(String[] args) {
		try{
			FileReader fileReader = new FileReader("./hi.txt");
			int c;
			while((c = fileReader.read())!= -1){
				System.out.print((char)c);
			}
		}catch (FileNotFoundException e){
			e.printStackTrace();
		}catch (IOException e2){
			e2.printStackTrace();
		}
	}
}

BufferedReader類(繼承自Reader):
readLine()方法,可以對換行符進行鑑別,一行一行地讀取輸入流中的內容。

Class BufferedReaderTester{
	Public static void main (String[] args){
		String fileName = "Hello.txt" , line;
		try{
			BufferedReader in = new BuffereedReader(new FileReader(fileName));
			Line = in.readLine(); //讀取一行內容
			while (line != null){
				System.out.println(line); line = in.readerLine();
			}
			In.close();
		}
		catch(IOException e){
			System.out.println("Problem reading" + fileName);
		}
	}
}
有的數據是二進制類型,可以使用二進制輸入輸出流進行讀寫,之後補上。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章