摘要:用兩個字節表示。兩個字節第一個字節是負數第二個字節可能是正數目前最常用的中文碼表,萬的中文和符號。用兩個字節表示,其中的一部分文字,第一個字節開頭是,第二字節開頭是最新的中文碼表,目前還沒有正式使用。
01輸入和輸出
* A:輸入和輸出 * a: 參照物 * 到底是輸入還是輸出,都是以Java程序為參照 * b: Output * 把內存中的數據存儲到持久化設備上這個動作稱為輸出(寫)Output操作 * 程序到文件稱為輸出 * c: Input * 把持久設備上的數據讀取到內存中的這個動作稱為輸入(讀)Input操作 * 文件到程序稱為輸入 * d: IO操作 * 把上面的這種輸入和輸出動作稱為IO操作02字節輸出流OutputStream
* A: 字節輸出流OutputStream * a.概念 * IO流用來處理設備之間的數據傳輸 * Java對數據的操作是通過流的方式 * Java用于操作流的類都在IO包中 * 流按流向分為兩種:輸入流,輸出流。 * 流按操作類型分為兩種: * 字節流 : 字節流可以操作任何數據,因為在計算機中任何數據都是以字節的形式存儲的 * 字符流 : 字符流只能操作純字符數據,比較方便。 * b.IO流常用父類 * 字節流的抽象父類: * InputStream * OutputStream * 字符流的抽象父類: * Reader * Writer * c.IO程序書寫 * 使用前,導入IO包中的類 * 使用時,進行IO異常處理 * 使用后,釋放資源 * d: 方法介紹 * void close(): 關閉此輸出流并釋放與此流有關的所有系統資源。 * void write(byte[] b): 將 b.length 個字節從指定的 byte 數組寫入此輸出流 * void write(byte[] b, int off, int len) :將指定 byte 數組中從偏移量 off 開始的 len 個字節寫入此輸出流。 * abstract void write(int b) : 將指定的字節寫入此輸出流。03字節輸出流FileOutputStream寫字節
* A: 字節輸出流FileOutputStream寫字節 * a: FileOutputStream * 寫入數據文件,學習父類方法,使用子類對象 * b: FileOutputStream構造方法 * 作用:綁定輸出的輸出目的 * FileOutputStream(File file) * 創建一個向指定 File 對象表示的文件中寫入數據的文件輸出流。 * FileOutputStream(File file, boolean append) * 創建一個向指定 File 對象表示的文件中寫入數據的文件輸出流,以追加的方式寫入。 * FileOutputStream(String name) * 創建一個向具有指定名稱的文件中寫入數據的輸出文件流。 * FileOutputStream(String name, boolean append) * 創建一個向具有指定 name 的文件中寫入數據的輸出文件流,以追加的方式寫入。 * c: 流對象使用步驟 * 1. 創建流子類的對象,綁定數據目的 * 2. 調用流對象的方法write寫 * 3. close釋放資源 * d: 注意事項 * 流對象的構造方法,可以創建文件,如果文件存在,直接覆蓋 * e: 案例代碼 /* * FileOutputStream * 寫入數據文件,學習父類方法,使用子類對象 * * 子類中的構造方法: 作用:綁定輸出的輸出目的 * 參數: * File 封裝文件 * String 字符串的文件名 * * 流對象使用步驟 * 1. 創建流子類的對象,綁定數據目的 * 2. 調用流對象的方法write寫 * 3. close釋放資源 * * 流對象的構造方法,可以創建文件,如果文件存在,直接覆蓋 */ public class FileOutputStreamDemo { public static void main(String[] args)throws IOException { FileOutputStream fos = new FileOutputStream("c:a.txt"); //流對象的方法write寫數據 //寫1個字節 fos.write(97); //關閉資源 fos.close(); } }04字節輸出流FileOutputStream寫字節數組
* A: 字節輸出流FileOutputStream寫字節數組 * a: 方法介紹 * void write(byte[] b): 將 b.length 個字節從指定的 byte 數組寫入此輸出流 * void write(byte[] b, int off, int len) :將指定 byte 數組中從偏移量 off 開始的 len 個字節寫入此輸出流。 * b: 案例代碼 /* * FileOutputStream * 寫入數據文件,學習父類方法,使用子類對象 * * 子類中的構造方法: 作用:綁定輸出的輸出目的 * 參數: * File 封裝文件 * String 字符串的文件名 * * 流對象使用步驟 * 1. 創建流子類的對象,綁定數據目的 * 2. 調用流對象的方法write寫 * 3. close釋放資源 * * 流對象的構造方法,可以創建文件,如果文件存在,直接覆蓋 */ public class FileOutputStreamDemo { public static void main(String[] args)throws IOException { FileOutputStream fos = new FileOutputStream("c:a.txt"); //流對象的方法write寫數據 //寫字節數組 byte[] bytes = {65,66,67,68}; fos.write(bytes); //寫字節數組的一部分,開始索引,寫幾個 fos.write(bytes, 1, 2); //寫入字節數組的簡便方式 //寫字符串 fos.write("hello".getBytes()); //關閉資源 fos.close(); } }05文件的續寫和換行符號
* A: 文件的續寫和換行符號 * a: 文件的續寫 * FileOutputStream構造方法, 的第二個參數中,加入true * b: 換行符號 * 在文件中,寫入換行,符號換行 * 可以寫在上一行的末尾, 也可以寫在下一行的開頭 * c: 案例代碼 /* * FileOutputStream 文件的續寫和換行問題 * 續寫: FileOutputStream構造方法, 的第二個參數中,加入true * 在文件中,寫入換行,符號換行 * 可以寫在上一行的末尾, 也可以寫在下一行的開頭 */ public class FileOutputStreamDemo1 { public static void main(String[] args)throws IOException { File file = new File("c:.txt"); FileOutputStream fos = new FileOutputStream(file,true); fos.write("hello ".getBytes()); fos.write("world".getBytes()); fos.close(); } }06IO中的異常處理
* A: IO中的異常處理 * a:IO流的異常處理 * try catch finally * b: 細節 * 1. 保證流對象變量,作用域足夠 * 2. catch里面,怎么處理異常 * 輸出異常的信息,目的看到哪里出現了問題 * 停下程序,從新嘗試 * 3. 如果流對象建立失敗了,需要關閉資源嗎 * new 對象的時候,失敗了,沒有占用系統資源 * 釋放資源的時候,對流對象判斷null * 變量不是null,對象建立成功,需要關閉資源 * c: 案例代碼 public class FileOutputStreamDemo3 { public static void main(String[] args) { //try 外面聲明變量,try 里面建立對象 FileOutputStream fos = null; try{ fos = new FileOutputStream("s:a.txt"); fos.write(100); }catch(IOException ex){ System.out.println(ex); throw new RuntimeException("文件寫入失敗,重試"); }finally{ try{ if(fos!=null) fos.close(); }catch(IOException ex){ throw new RuntimeException("關閉資源失敗"); } } } }07字節輸入流InputStream
* A: 字節輸入流InputStream * a: 方法介紹 * abstract int read() : * 從輸入流中讀取數據的下一個字節。 * int read(byte[] b) * 從輸入流中讀取一定數量的字節,并將其存儲在緩沖區數組 b 中。 * int read(byte[] b, int off, int len) * 將輸入流中最多 len 個數據字節讀入 byte 數組。 * void close() * 關閉此輸入流并釋放與該流關聯的所有系統資源。 * b: 案例代碼 /* * 字節輸入流 * java.io.InputStream 所有字節輸入流的超類 * 作用: 讀取任意文件,每次只讀取1個字節 * 讀取的方法 read * int read() 讀取1個字節 * int read(byte[] b) 讀取一定量的字節,存儲到數組中 */ public class InputStreamDemo { }08字節輸入流FileInputStream讀取字節
* A: 字節輸入流FileInputStream讀取字節 * a: 方法介紹 * abstract int read() : * 從輸入流中讀取數據的下一個字節,返回-1表示文件結束 * int read(byte[] b) * 從輸入流中讀取一定數量的字節,并將其存儲在緩沖區數組 b 中。 * 讀入緩沖區的字節總數,如果因為已經到達文件末尾而沒有更多的數據,則返回 -1。 * int read(byte[] b, int off, int len) * 將輸入流中最多 len 個數據字節讀入 byte 數組。 * void close() * 關閉此輸入流并釋放與該流關聯的所有系統資源。 * b: 案例代碼 /* * FileInputStream讀取文件 * * 構造方法: 為這個流對象綁定數據源 * * 參數: * File 類型對象 * String 對象 * 輸入流讀取文件的步驟 * 1. 創建字節輸入流的子類對象 * 2. 調用讀取方法read讀取 * 3. 關閉資源 * * read()方法, * read()執行一次,就會自動讀取下一個字節 * 返回值,返回的是讀取到的字節, 讀取到結尾返回-1 */ public class FileInputStreamDemo { public static void main(String[] args) throws IOException{ FileInputStream fis = new FileInputStream("c:a.txt"); //讀取一個字節,調用方法read 返回int //使用循環方式,讀取文件, 循環結束的條件 read()方法返回-1 int len = 0;//接受read方法的返回值 while( (len = fis.read()) != -1){ System.out.print((char)len); } //關閉資源 fis.close(); } } /* * int i = fis.read(); System.out.println(i); i = fis.read(); System.out.println(i); i = fis.read(); System.out.println(i); i = fis.read(); System.out.println(i); */09字節輸入流FileInputStream讀取字節數組
* A: 字節輸入流FileInputStream讀取字節數組 * a: 方法介紹 * int read(byte[] b) * 從輸入流中讀取一定數量的字節,并將其存儲在緩沖區數組 b 中。 * 讀入緩沖區的字節總數,如果因為已經到達文件末尾而沒有更多的數據,則返回 -1。 * int read(byte[] b, int off, int len) * 將輸入流中最多 len 個數據字節讀入 byte 數組。 * b: 案例代碼 /* * FileInputStream讀取文件 * 讀取方法 int read(byte[] b) 讀取字節數組 * 數組作用: 緩沖的作用, 提高效率 * read返回的int,表示什么含義 讀取到多少個有效的字節數 */ public class FileInputStreamDemo1 { public static void main(String[] args) throws IOException { FileInputStream fis = new FileInputStream("c:a.txt"); // 創建字節數組 byte[] b = new byte[2]; int len = fis.read(b); System.out.println(new String(b));// ab System.out.println(len);// 2 len = fis.read(b); System.out.println(new String(b));// cd System.out.println(len);// 2 len = fis.read(b); System.out.println(new String(b));// ed System.out.println(len);// 1 len = fis.read(b); System.out.println(new String(b));// ed System.out.println(len);// -1 fis.close(); } }10字節輸入流FileInputStream讀取字節數組的實現原理
* A:字節輸入流FileInputStream讀取字節數組的實現原理 * a: 原理 * 參見day23_source文件夾中的"讀取數組的原理.jpg" * b: 案例代碼 public class FileInputStreamDemo1 { public static void main(String[] args) throws IOException { FileInputStream fis = new FileInputStream("c:a.txt"); //創建字節數組 byte[] b = new byte[1024]; int len = 0 ; while( (len = fis.read(b)) !=-1){ System.out.print(new String(b,0,len)); } fis.close(); } }11文件復制原理
* A: 文件復制原理 * a: 見day23_source/文件復制原理.jpg12字節流復制文件讀取單個字節
* A: 字節流復制文件讀取單個字節 * a: 案例代碼 /* * 將數據源 c:a.txt * 復制到 d:a.txt 數據目的 * 字節輸入流,綁定數據源 * 字節輸出流,綁定數據目的 * * 輸入,讀取1個字節 * 輸出,寫1個字節 */ public class Copy { public static void main(String[] args) { //定義兩個流的對象變量 FileInputStream fis = null; FileOutputStream fos = null; try{ //建立兩個流的對象,綁定數據源和數據目的 fis = new FileInputStream("c: .zip"); fos = new FileOutputStream("d: .zip"); //字節輸入流,讀取1個字節,輸出流寫1個字節 int len = 0 ; while((len = fis.read())!=-1){ fos.write(len); } }catch(IOException ex){ System.out.println(ex); throw new RuntimeException("文件復制失敗"); }finally{ try{ if(fos!=null) fos.close(); }catch(IOException ex){ throw new RuntimeException("釋放資源失敗"); }finally{ try{ if(fis!=null) fis.close(); }catch(IOException ex){ throw new RuntimeException("釋放資源失敗"); } } } } }13字節流復制文件讀取字節數組
* A: 字節流復制文件讀取字節數組 * a: 案例代碼 /* * 字節流復制文件 * 采用數組緩沖提高效率 * 字節數組 * FileInputStream 讀取字節數組 * FileOutputStream 寫字節數組 */ public class Copy_1 { public static void main(String[] args) { long s = System.currentTimeMillis(); FileInputStream fis = null; FileOutputStream fos = null; try{ fis = new FileInputStream("c: .zip"); fos = new FileOutputStream("d: .zip"); //定義字節數組,緩沖 byte[] bytes = new byte[1024*10]; //讀取數組,寫入數組 int len = 0 ; while((len = fis.read(bytes))!=-1){ fos.write(bytes, 0, len); } }catch(IOException ex){ System.out.println(ex); throw new RuntimeException("文件復制失敗"); }finally{ try{ if(fos!=null) fos.close(); }catch(IOException ex){ throw new RuntimeException("釋放資源失敗"); }finally{ try{ if(fis!=null) fis.close(); }catch(IOException ex){ throw new RuntimeException("釋放資源失敗"); } } } long e = System.currentTimeMillis(); System.out.println(e-s); } }14編碼表
* A: 編碼表 * a: 定義: * 生活中字符和計算機二進制的對應關系表,就是編碼表 * b: 分類 * 1、ascii: 一個字節中的7位就可以表示。對應的字節都是正數。0-xxxxxxx * 2、iso-8859-1:拉丁碼表 latin,用了一個字節用的8位。1-xxxxxxx 負數。 * 3、GB2312:簡體中文碼表。包含6000-7000中文和符號。用兩個字節表示。兩個字節第一個字節是負數,第二個字節可能是正數 * GBK:目前最常用的中文碼表,2萬的中文和符號。用兩個字節表示,其中的一部分文字,第一個字節開頭是1,第二字節開頭是0 * GB18030:最新的中文碼表,目前還沒有正式使用。 * 4、unicode:國際標準碼表:無論是什么文字,都用兩個字節存儲。 * Java中的char類型用的就是這個碼表。char c = "a";占兩個字節。 * Java中的字符串是按照系統默認碼表來解析的。簡體中文版 字符串默認的碼表是GBK。 * 5、UTF-8:基于unicode,一個字節就可以存儲數據,不要用兩個字節存儲,而且這個碼表更加的標準化,在每一個字節頭加入了編碼信息(后期到api中查找)。 * 6、能識別中文的碼表:GBK、UTF-8;正因為識別中文碼表不唯一,涉及到了編碼解碼問題。 * 對于我們開發而言;常見的編碼 GBK UTF-8 ISO-8859-1 * 文字--->(數字) :編碼。 “abc”.getBytes() byte[] * (數字)--->文字 : 解碼。 byte[] b={97,98,99} new String(b)15字符輸出流寫文本FileWriter類
* A: 字符輸出流寫文本FileWriter類 * a: 方法介紹 * void write(int c) * 寫入單個字符 * void write(String str) * 寫入字符串 * void write(String str, int off, int len) * 寫入字符串的某一部分 * void write(char[] cbuf) * 寫入字符數組 * abstract void write(char[] cbuf, int off, int len) * 寫入字符數組的某一部分 * b: 案例代碼 /* * 字符輸出流 * java.io.Writer 所有字符輸出流的超類 * 寫文件,寫文本文件 * * 寫的方法 write * write(int c) 寫1個字符 * write(char[] c)寫字符數組 * write(char[] c,int,int)字符數組一部分,開始索引,寫幾個 * write(String s) 寫入字符串 * * Writer類的子類對象 FileWriter * * 構造方法: 寫入的數據目的 * File 類型對象 * String 文件名 * * 字符輸出流寫數據的時候,必須要運行一個功能,刷新功能 * flush() */ public class WriterDemo { public static void main(String[] args) throws IOException{ FileWriter fw = new FileWriter("c:1.txt"); //寫1個字符 fw.write(100); fw.flush(); //寫1個字符數組 char[] c = {"a","b","c","d","e"}; fw.write(c); fw.flush(); //寫字符數組一部分 fw.write(c, 2, 2); fw.flush(); //寫如字符串 fw.write("hello"); fw.flush(); fw.close(); } }16字符輸入流讀取文本FileReader類
* A: 字符輸入流讀取文本FileReader類 * a: 方法介紹 * int read() * 讀取單個字符 * int read(char[] cbuf) * 將字符讀入數組 * abstract int read(char[] cbuf, int off, int len) * 將字符讀入數組的某一部分。 * b: 案例代碼 /* * 字符輸入流讀取文本文件,所有字符輸入流的超類 * java.io.Reader * 專門讀取文本文件 * * 讀取的方法 : read() * int read() 讀取1個字符 * int read(char[] c) 讀取字符數組 * * Reader類是抽象類,找到子類對象 FileReader * * 構造方法: 綁定數據源 * 參數: * File 類型對象 * String文件名 */ public class ReaderDemo { public static void main(String[] args) throws IOException{ FileReader fr = new FileReader("c:1.txt"); /*int len = 0 ; while((len = fr.read())!=-1){ System.out.print((char)len); }*/ char[] ch = new char[1024]; int len = 0 ; while((len = fr.read(ch))!=-1){ System.out.print(new String(ch,0,len)); } fr.close(); } }17flush方法和close方法區別
* A: flush方法和close方法區別 *a: flush()方法 * 用來刷新緩沖區的,刷新后可以再次寫出,只有字符流才需要刷新 *b: close()方法 * 用來關閉流釋放資源的的,如果是帶緩沖區的流對象的close()方法,不但會關閉流,還會再關閉流之前刷新緩沖區,關閉后不能再寫出18字符流復制文本文件
* A: 字符流復制文本文件 * a: 案例代碼 /* * 字符流復制文本文件,必須文本文件 * 字符流查詢本機默認的編碼表,簡體中文GBK * FileReader讀取數據源 * FileWriter寫入到數據目的 */ public class Copy_2 { public static void main(String[] args) { FileReader fr = null; FileWriter fw = null; try{ fr = new FileReader("c:1.txt"); fw = new FileWriter("d:1.txt"); char[] cbuf = new char[1024]; int len = 0 ; while(( len = fr.read(cbuf))!=-1){ fw.write(cbuf, 0, len); fw.flush(); } }catch(IOException ex){ System.out.println(ex); throw new RuntimeException("復制失敗"); }finally{ try{ if(fw!=null) fw.close(); }catch(IOException ex){ throw new RuntimeException("釋放資源失敗"); }finally{ try{ if(fr!=null) fr.close(); }catch(IOException ex){ throw new RuntimeException("釋放資源失敗"); } } } } }19總結
* 把今天的知識點總結一遍。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/67160.html
摘要:字節流可以處理所有以為單位存儲的文件,也就是說可以處理所有的文件,但是在處理字符的速度上不如字符流。文件字節輸入流的讀取時,是直接同字節流中讀取的。原理就是在字節流的基礎上增加了編解碼的操作。 前言 流是干什么的:為了永久性的保存數據。 IO流用來處理設備之間的數據傳輸(上傳和下載文件) java對數據的操作是通過流的方式。 java用于操作流的對象都在IO包中。 java IO系統...
摘要:一面試題及剖析今日面試題今天壹哥帶各位復習一塊可能會令初學者比較頭疼的內容,起碼當時讓我很有些頭疼的內容,那就是流。在這里壹哥會從兩部分展開介紹流,即與流。除此之外盡量使用字節流。關閉此輸入流并釋放與流相關聯的任何系統資源。 一. 面試題及剖析 1. 今日面試題 今天 壹哥 帶各位復習一塊可...
摘要:中一個類型采用編碼,大小占兩個字節,可以表示一個中文字符中類型采用字符集,無法表示一個中文字符緩沖區實現原理字節流本質上是直接與慢速存儲設備進行,速度較慢。從字節流中恢復一個對象,稱之為對象反序列化。 字符編碼/Java字符流與字節流/Buffer原理/對象序列化 聲明 文章均為本人技術筆記,轉載請注明出處https://segmentfault.com/u/yzwall 字符編碼與編...
摘要:是一個系統支持的所有字符的集合,包括各國家文字標點符號圖形符號數字等字符集簡體中文碼表。支持中國國內少數民族的文字,同時支持繁體漢字以及日韓漢字等字符集為表達任意語言的任意字符而設計,是業界的一種標準,也稱為統一碼標準萬國碼。 1 File1.1 File類的概述和構造方法File: 它是文件和目錄路徑名的抽象...
摘要:字節流處理字節數據的流對象。寫入字符流的抽象類。是字符流通向字節流的橋梁可使用指定的將要寫入流中的字符編碼成字節。字節流是表示字節輸入流的所有類的超類。轉換流的最強功能就是基于字節流編碼表。刪除此抽象路徑名表示的文件或目錄。 IO流(重點理解)用于處理設備上數據。流:可以理解數據的流動,就是一個數據流。IO流最終要以對象來體現,對象都存在IO包中。流也進行分類:1:輸入流(讀)和輸出流...
摘要:字符轉換流原理字節流編碼表。和作為子類,僅作為操作字符文件的便捷類存在。源目的先根據需求明確要讀,還是要寫。屏幕網絡完全可以明確具體要使用哪個流對象。明確四是否需要額外功能呢額外功能轉換嗎轉換流。高效嗎緩沖區對象。 01轉換流概述 * A: 轉換流概述 * a: 轉換流概述 * OutputStreamWriter 是字符流通向字節流的橋梁:可使用指定的字符編碼...
閱讀 3118·2021-11-15 18:14
閱讀 1773·2021-09-22 10:51
閱讀 3283·2021-09-09 09:34
閱讀 3505·2021-09-06 15:02
閱讀 1013·2021-09-01 11:40
閱讀 3186·2019-08-30 13:58
閱讀 2523·2019-08-30 11:04
閱讀 1081·2019-08-28 18:31