初學Java之乾貨理論篇_輸入,輸出流


1.程序在運行期間,可能需要從外部的存儲媒介或其他程序中讀入所需要的數據,
這就需要使用輸入流對象。
2.輸入流的指向稱作它的源,程序從指向源的輸入流中讀取源中讀取源中的數據。
3.程序在處理數據後,可能需要將處理的結果寫入到永久的存儲媒介中或傳送給
其他的應用程序,這就需要使用輸出流對象。
4.輸出流的指向稱作它的目的地,程序通過向輸出流中寫入數據把數據傳送到目
的地。
5.在Java中,將通過不同輸入/輸出設備(鍵盤,內存,顯示器,網絡等)之間的數據
傳輸抽象表述爲“流”。Java中的“流”都位於java.io包中,稱爲IO(輸入/輸出)流。
6.按照處理數據的單位不同分爲字節流和字符流。
7.Java把處理二進制數據的流稱爲字節流,字節流每次處理一個字節的數據,
以Stream結尾,說明是字節流。(例如:處理英文字符)
8.把處理某種格式的特定數據稱爲字符流,字符流每次處理一個字符的數據。
以Reader / Writer結尾,說明是字符流。(例如:處理漢字)

在這裏插入圖片描述

File類

1.File類是java.io包中唯一處理磁盤文件和目錄的類。它定義的對文件和目錄操作的方法
都是與平臺無關的,通過使用File類提供的各種方法能夠創建、刪除文件和目錄,獲取磁盤
上指定文件和目錄的相關信息。

在這裏插入圖片描述
在這裏插入圖片描述

2.File類的常用方法
創建功能
public boolean createNewFile()
public boolean mkdir()
public boolean mkdirs()
刪除功能
public boolean delete()
重命名功能
public boolean renameTo(File dest)

mkdir()
只能在已經存在的目錄中創建創建文件夾。
mkdirs()
可以在不存在的目錄中創建文件夾。諸如:a\\b,既可以創建多級目錄。
3.在Unix/Linux操作系統下,路徑分隔符爲“/”,而在Windows和DOS下的路徑分隔符爲“\”。
Java對這兩種分隔符都支持。但是如果使用“\”作爲分隔符,注意要以轉義字符“\\”來代替,
例如以“c:\\sun\\jdk”表示“c:\sun\jdk”。
4.使用File(String filename)創建文件,當filename是文件名字時,該文件被認爲與
當前應用程序在同一目錄中。
5.遍歷目錄下的文件:
   如果希望得到指定類型的文件,如獲取指定目錄下所有的'.java'文件,則可以使用重載
的list(FilenameFilter  filter)方法,該方法接收一個FilenameFilter類型的參數。
FilenameFilter是一個接口,被稱作文件過濾器,其中定義了一個抽象的方法
accept(File dir,String name),在調用list()方法時,需要實現文件過濾器,
在accept()方法中做出判斷,從而獲取到指定類型的文件。
6.list(FilenameFilter filter)方法的工作原理如下:
1️⃣調用list()方法傳入FilenameFilter文件過濾器對象;
2️⃣取出當前File對象所代表目錄下的所有子目錄和文件
3️⃣對於每一個子目錄或文件,都會調用文件過濾器對象的accept(File dir,String name)
方法,並把代表當前目錄的File對象以及這個子目錄或文件的名稱作爲參數dir和name傳遞
給方法。
4️⃣如果accept()方法返回true,就將當前遍歷的這個子目錄或文件添加到數組中,如果
返回false,則不添加。

如何遍歷指定目錄下所有擴展名爲.java的文件:在這裏插入圖片描述

如果想得到所有子目錄下的File類型對象,list()方法顯然不能滿足,這時,可
以使用listFiles()方法,該方法返回一個File對象數組。
在這裏插入圖片描述

在操作文件時,經常需要刪除一個目錄下的某個文件或者刪除整個目錄,這時,首先會想到File類的delete()方法,但該方法無法刪除目錄。
在這裏插入圖片描述

刪除文件失敗了。因爲File類的delete()方法只是刪除一個指定的文件,假如File對象代表目錄,並且目錄下包含子目錄或文件,則File類的delete()方法不允許對這個目錄直接刪除。

在這裏插入圖片描述
定義了一個刪除目錄的靜態方法deleteDir(),接收一個File類型的參數。在這個方法中,調用listFiles()方法把這個目錄下所有的子目錄和文件保存到一個File類型的數組files中,然後遍歷files,如果是目錄就重新調用deleteDir()方法進行遞歸,如果是文件就直接調用File的delete()方法刪除。當刪除完一個目錄下的所有文件後,再刪除當前這個目錄,這樣便從裏層到外層遞歸的刪除了整個目錄。
需要注意的是,Java中刪除目錄是從虛擬機直接刪除而不進入回收站。

運行可執行文件:
1.當要執行一個本地機上的可執行文件時,可以使用java.lang包中的Runtime類。
首先使用Runtime類聲明一個對象。如:Runtime ec;
2.然後使用該類的getRuntime()靜態方法創建這個對象:
ec=Runtime.getRuntime();
3.ec可以調用exec(String command)方法打開本地計算機的可執行文件或執行一個操作
//例如打開IE上搜狐:file=new File(“C:\\Program Files\\Internet Explorer”,
“IEXPLORE www.sohu.com”);

字節流與字符流

字節流

1.在JDK中,提供了兩個抽象類InputStream和OutputStream,它們是字節流的
頂級父類,所有的字節輸入流繼承自InputStream,所有的字節輸出流都繼承自
OutputStream。

在這裏插入圖片描述
在這裏插入圖片描述

1.InputStream和OutputStream兩個類雖然提供了一系列和讀寫數據相關的方法,但這兩個
類是抽象類,不能被實例化。
2.針對文件的讀寫,JDK專門提供了兩個類,分別是FileInputStream和FileOutputStream
,其中FileInputStream是InputStream的子類,它是操作文件的字節輸入流,專門用於
讀取文件中的數據。

在這裏插入圖片描述

字節流讀寫文件
1.與FileInputStream對應的是FileOutputStream
2.FileOutputStream是OutputStream的子類,它是操作文件的字節輸出流,專門用於把
數據寫入文件
3.long skip(long numBytes):輸入流調用該方法跳過numBytes個字節,並返回實際
跳過的字節數目。
4.OutStream流以字節爲單位順序地寫文件,只要不關閉流,每次調用write方法就順序
地向目的地寫入內容,直到流被關閉。

字節流緩衝區
爲了提高拷貝文件的效率,可以定義一個字節數組作爲緩衝區。在拷貝文件時,可以一次性讀取多個字節的數據,並保存在字節數組中,然後將字節數組中的數據一次性寫入文件。
在這裏插入圖片描述
字節緩衝流
在IO包中提供兩個帶緩衝的字節流,分別是BufferedInputStream和BufferdOutputStream,這兩個流都使用了裝飾設計模式。它們的構造方法中分別接收InputStream和OutputStream類型的參數作爲被包裝對象,在讀寫數據時提供緩衝功能。
在這裏插入圖片描述

字符流

字符流

1.同字節流一樣,字符流也有兩個抽象的頂級父類,分別是Reader和Writer,只提供了
一系列用於字符流處理的接口。它們的方法與類InputStream和OutputStream類似,只不
過其中的參數換成字符或字符數組。
2.Reader是字符輸入流,用於從某個源設備讀取字符。
3.Writer是字符輸出流,用於向某個目標設備寫入字符。
4.字符流讀取字符, 就要先讀取到字節數據, 然後轉爲字符。 如果要寫出字符, 需要把
字符轉爲字節再寫出。
5.轉換流是一種包裝流,其中OutputStreamWriter是Writer的子類,可以將一個字節流
輸出流包裝成字符輸出流,方便直接寫入字符,而InputStreamReader是Reader的子類,
它可以將一個字節輸入流包裝成字符輸入流,方便直接讀取字符。

在這裏插入圖片描述

在這裏插入圖片描述

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