java io學習筆記(一)
阿新 • • 發佈:2021-01-01
技術標籤:java
整理一下java io的相關學習筆記,也方便自己溫故知新…
package io; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; /** * 流 java標準的IO操作 * 使用流我們可以以同一的方式讀寫一切裝置。 * * java將流按照讀寫功能分為: * 輸入流:用於從外界讀取資料到程式中 (負責讀操作) * 輸出流:用於將資料從程式中寫出到外界 (負責寫操作) * * java.io.InputStream是所有位元組輸入流的超類 * java.io.OutputStream是所有位元組輸出流的超類 * 它們規定了所有流都必須具備的讀或寫操作。因此無論讀寫 * 什麼裝置的流,讀寫方法都是一樣的。 * * java將流分為節點流和處理流兩大類: * 節點流:又稱為低階流,是實際連線程式與另一端的"管道", * 負責實際讀或寫資料的流。讀寫操作一定是建立在節點流的 * 基礎上進行的。 * * 處理流:又稱為高階流,不能獨立存在,必須連線在其他流上 * 目的是當資料流經當前處理流時可以對資料進行某種加工處理 * 操作,簡化我們對資料的相關操作。 * * 檔案流: * 檔案流是一對低階流,用於讀寫檔案。 * * 檔案流與RandomAccessFile都是用來讀寫檔案資料的,雖然 * 讀寫方法定義都相同(read,write方法)但是底層實際的讀寫 * 形式完全不同。 * 檔案流是基於java標準IO對檔案進行資料讀寫的,而流的讀寫 * 形式為【順序讀寫】,即:讀或寫操作只能順序向後,不可回退。 * RAF是基於指標的隨機讀寫形式,可以操作指標對檔案任意位置 * 進行讀寫。 * 所以檔案流做不到對檔案任意位置編輯操作,但是基於流連線 * 可以輕鬆完成RAF不容易辦到的事情。 * * 流連線:使用流讀寫時,串聯若干的高階流,並最終串聯到某個 * 低階流對某裝置進行讀寫操作的過程。 * 流連線也是IO的精髓。 * * * * @author Administrator * */ public class FosDemo { public static void main(String[] args) throws IOException { /* * File提供的構造方法: * FileOutputStream(File file) * FileOutputStream(String path) * 以上形式建立檔案輸出流時,若指定的檔案已經存在 * 那麼流建立時會先將該檔案資料全部清除。所以這種 * 方式為覆蓋寫模式。 * */ // FileOutputStream fos // = new FileOutputStream("fos.txt"); /* * 如果建立時再傳入一個boolean值型別的引數,那麼 * 當前檔案輸出流就變為了追加模式,即:若檔案已存 * 在則資料全部保留,通過流寫出的內容會被追加到 * 檔案末尾。 */ FileOutputStream fos = new FileOutputStream("fos.txt",true); String str = "好嗨哦~感覺人生已經到達了高潮~"; byte[] data = str.getBytes("UTF-8"); fos.write(data); fos.write("感覺人生已經到達了巔峰~".getBytes("UTF-8")); System.out.println("寫出完畢!"); fos.close(); } }
下面的程式碼實現了複製的功能
package io; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; /** * 使用檔案流完成檔案的複製操作 * @author Administrator * */ public class CopyDemo { public static void main(String[] args) throws IOException { /* * 流程: * 1:建立檔案輸入流讀取原檔案 * 2:建立檔案輸出流向複製檔案寫 * 3:迴圈從原檔案讀取一組位元組並寫入到複製檔案中 * 完成複製操作 * 4:關閉兩個流 */ FileInputStream fis = new FileInputStream("music.mp3"); FileOutputStream fos = new FileOutputStream("music_cp2.mp3"); byte[] data = new byte[1024*10]; int len = -1; while((len = fis.read(data))!=-1) { fos.write(data,0,len); } System.out.println("複製完畢!"); fis.close(); fos.close(); } }