JAVA IO系統:輸入輸出流(下)

流的概念

流是一組有順序的,有起點和終點的字節集合,是對數據傳輸的總稱或抽象。即數據在兩設備間的傳輸稱爲流,流的本質是數據傳輸,根據數據傳輸特性將流抽象爲各種類,方便更直觀的進行數據操作。該怎麼理解這個流呢?這裏我們完全可以類比這水流去理解,只不過我們這裏的流指的則是數據了,結合兩個概念“流”和“數據”也就得到我們的重點數據流,就如同我們的水流一樣,對於水流,那流入流出的都是水,而我們的數據流流入流出的自然就是數據了。

那麼IO又是什麼呢?I可理解爲input,O可理解爲output,其實所謂的IO,我認爲就是輸入輸出,對於IO我們可以如下分類:

根據處理數據類型的不同分爲:字符流和字節流

根據數據流向不同分爲:輸入流和輸出流

輸入(Input):可以讓程序從外部系統獲得數據(核心含義是“讀”,讀取外部數據)。

輸出(Output):程序輸出數據給外部系統從而可以操作外部系統(核心含義是“寫”,將數據寫出到外部系統)

字符流與字節流的區別:

1)字節流可用於任何類型的對象,包括二進制對象,音頻、圖片等,而字符流只能處理字符或者字符串;

2)字節流提供了處理任何類型的IO操作的功能,但它不能直接處理Unicode字符,而字符流就可以

Java流類圖結構:

字節流

FileInputStream

構造方法:

1)FileInputStream(File file):通過打開與實際文件的連接創建一個 FileInputStream ,該文件由文件系統中的 File對象 file命名。

2)FileInputStream(FileDescriptor fdObj):創建 FileInputStream通過使用文件描述符 fdObj ,其表示在文件系統中的現有連接到一個實際的文件。

3)FileInputStream(String name):通過打開與實際文件的連接來創建一個 FileInputStream ,該文件由文件系統中的路徑名 name命名。

FileInputStream讀取文本

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

public class FileStreamTest {
	public static void main(String[] args) throws IOException {
		File file = new File("E:\\test\\test.txt");
		//爲什麼要定義這麼一個數組,我們看這個byte數組其實就是1kb大小,我們之前是一個字節一個字節讀取,我們現在是1kb1kb的去讀
		byte[] bytes = new byte[1024];  //1kb
		FileInputStream fileInputStream = new FileInputStream(file);
		
		//現在傳入一個byte數組意味着按照byte數組大小讀取,然後讀取到的文本內容存放在這個byte數組中再返回一共讀取的字節數
		int read = fileInputStream.read(bytes);
		//需要對這個讀取到的byte數組進行轉換
		String s = new String(bytes);

                System.out.println(s);//打印讀取到的內容
                System.out.println(read);//13
		
	}

}

FileOutputStrem

構造方法:

​​​​​​1)FileOutputStream(File file):創建文件輸出流以寫入由指定的 File對象表示的文件

2)FileOutputStream(File file, boolean append):創建文件輸出流以寫入由指定的 File對象表示的文件。

3)FileOutputStream(FileDescriptor fdObj):創建文件輸出流以寫入指定的文件描述符,表示與文件系統中實際文件的現有連接。

4)FileOutputStream(String name):創建文件輸出流以指定的名稱寫入文件。

5)FileOutputStream(String name, boolean append):創建文件輸出流以指定的名稱寫入文件。

FileOutputStrem寫入文本

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileStreamTest {
	public static void main(String[] args) throws IOException {
		
		
		File file = new File("E:\\test\\test.txt");
		byte[] bytes = new byte[1024];  //1kb
		FileInputStream fileInputStream = new FileInputStream(file);
		int read = fileInputStream.read(bytes);
                FileOutputStream fileOutputStream = new FileOutputStream(file,true);
                //這裏增加了一個true,什麼意思呢?這裏如果你不寫的話默認就是false,那麼你寫入文本的時候就會覆蓋之前的內容,但是如果你加上true的話就代表在原有文本之後追加
                fileOutputStream.write(bytes);
	}

}

字符流

InputStremReader讀取文本

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class FileStreamTest {
	public static void main(String[] args) throws IOException {
		
		File file = new File("E:\\test\\words.txt");
		char[] c = new char[64];

		FileInputStream fileInputStream = new FileInputStream(file);
		InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream,"gbk");
		int read = inputStreamReader.read(c);
		System.out.println( new String(c));//晴天,陰天,多雲,小雨,大風,中雨,小雪,雷陣雨
		
		FileReader filereader = new FileReader(file);
		int readfilereader = filereader.read(c);
		System.out.println( new String(c));//晴天,陰天,多雲,小雨,大風,中雨,小雪,雷陣雨

	}

}

如上:FileReader它不需要像InputStremReader一樣傳入一個字節流,同樣也不能直接傳入編碼格式,至於其他的操作幾乎就是一樣的,而BufferedReader緩衝流的優點是可以直接調取readLine方法進行整行讀取,因爲是整行讀取可以保持格式不亂

 

 

 

 

 

 

 

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