Java提高篇(二):IO位元組流、字元流和處理流
在我們的Java語言當中,通常會有對檔案進行讀寫,因此我們引入java的IO類來進行檔案的讀寫。
一.位元組流
下面是一個位元組流的例項:
1 import java.io.*; 2 public class IO { 3 public static void main(String[] args) { 4 System.out.println("現在利用Java的一個類讀取一個資料已經定義好的資料"); 5 FileInputStream fis=null;//利用這個函式寫進來的是位元組型讀入而非字元型 6 FileOutputStream fos=null;//這個類是我們引入的IO包當中的類了,首先進行物件和引用變數的建立,後面使用了丟擲異常的操作是為了讓機器避免發生出錯。 7 try 8 { 9 fis=new FileInputStream("F:/我自己編寫的程式碼庫/JAVA/src/from.txt");//後面引入引數,說明讀取的檔案的絕對路徑,絕對路徑裡面有中文都居然成功了。 10 fos =new FileOutputStream("F:/我自己編寫的程式碼庫/JAVA/src/fromto.txt"); 11 byte buffer[]=new byte[100];//這裡定義位元二進位制的陣列,證明了我們使用的是位元組型流,而不是字元型,字元型利用了其它的定義 12 int temp=fis.read(buffer,0,100);//第一:輸入進來的必須是位元陣列流。第二:開始進行輸入的位元序列號,如第一個,第二個。第三:輸入流的位元長度 13 for (int i=0;i<=99;i++) 14 { 15 System.out.println(buffer[i]); 16 } 17 fos.write(buffer,0,temp);//temp變數reveal了讀入資料所接收到的位元組的長度,這個正好是read函式的返回值 18 } 19 catch (Exception e) 20 { 21 System.out.println(e);//在改變了我們的讀取陣列長度之後,讀取成功了,之前在for迴圈的地方越界了 22 } 23 } 24 25 }
如果想讀入一篇具有多個文字的檔案的話,可以使用以下程式碼:
1 import java.io.*; 2 3 public class IO2 { 4 public static void main(String[] args) { 5 System.out.println("現在進行大型檔案的讀寫"); 6 FileInputStream fis1=null; 7 FileOutputStream fos1=null; 8 try 9 { 10 fis1=new FileInputStream("F:/我自己編寫的程式碼庫/JAVA/src/from1.txt"); 11 fos1=new FileOutputStream("F:/我自己編寫的程式碼庫/JAVA/src/fromto1.txt"); 12 byte buffer[]=new byte[1024]; 13 while(true) 14 { 15 int temp=fis1.read(buffer,0,buffer.length);//read方法返回的是每次讀取檔案的位元組數(比如a的asc碼等) 16 if(temp==-1)//假設讀到1024位元組了,或者在1024位元組之前就沒有位元組可讀了,就會返回-1這個數值,然後跳出該迴圈,進行下一個迴圈 17 { 18 break;//這個程式在進行下一個迴圈的進入點在哪裡呢?並沒有提到,按道理來說是不會從剛剛已經讀過的資料開始讀,應該裡面有一種自動讀取的機制 19 } 20 fos1.write(buffer,0,buffer.length); 21 } 22 } 23 catch (Exception e) 24 { 25 System.out.println(e); 26 } 27 finally { 28 try{ 29 fis1.close(); 30 fos1.close();//在這裡進行IO流的關閉,有開就有關,不然的話就會造成資源的浪費 31 System.out.println("讀寫完畢"); 32 } 33 catch (Exception e) 34 { 35 System.out.println(e); 36 } 37 } 38 }}
注意前面建立物件的時候,我們建立的陣列具有1024個位元組,這是因為我們常常通過1024個位元組進行讀取,1024個位元組正好等於了1個K,這樣才可以對大檔案當中的文字進行讀寫。最後我們在finally處,關閉了這個流,如果不關閉這個流的話,檔案寫入進去之後,是不會被儲存下來的。
二.字元流
示例程式碼如下:
1 mport java.io.*; 2 public class IO3 { 3 public static void main(String[] args) { 4 System.out.println("現在開始字元流型程式的編寫"); 5 FileReader fis2=null; 6 FileWriter fos2=null; 7 try { 8 fis2=new FileReader("F:/我自己編寫的程式碼庫/JAVA/src/from2.txt"); 9 fos2=new FileWriter("F:/我自己編寫的程式碼庫/JAVA/src/fromto2.txt"); 10 char buffer[]=new char[100];//字元流和位元組流的區別就是這裡,引入的物件buffer是字元型定義的是字元而不是二進位制了。以及前面建立的兩個物件分別是: FileReader和FileWriter。這就是兩個不同的區別,其它的完全相同。 11 int temp=fis2.read(buffer,0,buffer.length); 12 for(int i=0;i<=99;i++) 13 { 14 System.out.println(buffer[i]); 15 } 16 fos2.write(buffer,0,buffer.length); 17 System.out.println("完成輸入以及輸出"); 18 } 19 catch (Exception e) 20 { 21 System.out.println(e); 22 } 23 finally { 24 try{ 25 fis2.close(); 26 fos2.close();//只有關閉了輸入輸出流之後,輸入進去的位元組才會儲存,不關閉的話,就僅僅會停留在記憶體當中不會儲存的。這就是需要關閉的原因了。 27 } 28 catch (Exception e) 29 { 30 System.out.println(e); 31 } 32 } 33 } 34 }
讀取大型檔案的程式碼只需要根據和位元組流進行相似的處理就可以進行讀取大型檔案了。
三.處理流
例項程式碼如下:
1 import java.io.*; 2 public class IO4 { 3 public static void main(String[] args) { 4 System.out.println("現在開始處理流程式的書寫 "); 5 FileReader a=null; 6 BufferedReader b=null; 7 try 8 { 9 String line=null; 10 a=new FileReader("F:/我自己編寫的程式碼庫/JAVA/src/from2.txt"); 11 b=new BufferedReader(a); 12 while(true) 13 { 14 line=b.readLine(); 15 if(line==null) 16 { 17 break; 18 } 19 System.out.println(line);//這裡列印出了我們讀取檔案的內容,至於裡面的內容為什麼會像像這樣列印,明天再來講解。 20 } 21 } 22 catch (Exception e) 23 { 24 System.out.println(e); 25 } 26 } 27 }
上述程式碼還是比較容易理解的。
相關文章
- java處理流 和節點流(在位元組流和字元流中,又分為處理流和節點流)Java字元
- Java基礎(八)——IO流1_位元組流、字元流Java字元
- java入門(字元流、位元組流)Java字元
- Java的位元組流,字元流和緩衝流對比探究Java字元
- Java位元組流和字元流,是時候總結一下IO流了Java字元
- 面試必問的 Java 位元組流與字元流面試Java字元
- IO 字元流字元
- Java IO流字元流簡介及基本使用Java字元
- Java IO: 其他字元流(下)Java字元
- 檔案輸入輸出處理(二)-位元組流
- IO流的位元組輸入輸出流(InputStream,OutputStream)
- 菜鳥學習筆記:Java提升篇6(IO流2——資料型別處理流、列印流、隨機流)筆記Java資料型別隨機
- IO流之 檔案操作字元流字元
- IO流 檔案字元流FileReader、FlieWriter字元
- [java]利用IO流中的位元組流和緩衝流寫一個複製資料夾的小程式Java
- 阿里Java學習路線:階段 1:Java語言基礎-Java語言高階特性:第16章:位元組流與字元流:課時77:位元組流與字元流的區別阿里Java字元
- 傳智黑馬java基礎學習——day23(位元組流、字元流)Java字元
- 面試官:位元組流可以處理一切檔案為什麼還需要字元流呢?面試字元
- 位元組流
- Java IO: 流Java
- Java IO流Java
- java -IO流Java
- Java IO流Java
- java - IO流Java
- Java的IO流Java
- Java-字元流Java字元
- [java IO流]之 萬能輸出流列印流printWriterJava
- [java IO流]之 序列化流和反序列化流(ObjectOutputStream/ObjectInputStream)JavaObject
- JavaIO流(一)-位元組輸入流與字元輸入流JavaAI字元
- [java IO流]之 IO概述Java
- 位元組陣列流陣列
- 緩衝位元組流#
- JS 位元組流 解析JS
- JAVA_基礎IO流物件流(三)Java物件
- Flink的流處理API(二)API
- IO流上:概述、字元流、緩衝區(java基礎)字元Java
- JAVA IO流-小白版Java
- Java筆記-IO流Java筆記