Java基礎-IO流對象之字節流(Stream)

                  Java基礎-IO流對象之字節流(Stream)
java

                                      做者:尹正傑golang

版權聲明:原創做品,謝絕轉載!不然將追究法律責任。shell

 

  在前面我分享的筆記中,咱們一直都是在操做文件或者文件夾,並無給文件中寫任何數據。如今咱們就要開始給文件中寫數據,或者讀取文件中的數據。什麼是輸入呢?咱們這裏的輸入指的是將文件的內容加載到程序中的過程叫作輸入,那上面叫作輸出呢?就是將程序的內容持久化到硬盤上叫作輸出。數組

 

一.字節輸出流(outputStream)eclipse

   java.io.OutputStream此抽象類是表示輸出字節流的全部類的超類。spa

  做用:從Java程序將內存中的數據寫入到磁盤文件中。code

1>.字節輸出流FileOutputStream寫字節對象

 1 /*
 2 @author :yinzhengjie  3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
 4 EMAIL:y1053419035@qq.com  5 */
 6 
 7 package cn.org.yinzhengjie.note5;  8 
 9 import java.io.FileOutputStream; 10 import java.io.IOException; 11 
12 public class FileOutputStreamDemo { 13     public static void main(String[] args) throws IOException { 14         //流對象的構造方法,能夠根據路徑建立文件,若是文件存在則直接清空文件內容!
15         FileOutputStream fos = new FileOutputStream("yinzhengjie.txt"); 16         //往文件中寫一個字節
17         fos.write(50); 18         fos.write(48); 19         fos.write(49); 20         fos.write(56); 21         //釋放資源
22  fos.close(); 23  } 24 }

2>.字節輸出流FileOutputStream寫字節數組blog

 1 /*
 2 @author :yinzhengjie  3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
 4 EMAIL:y1053419035@qq.com  5 */
 6 
 7 package cn.org.yinzhengjie.note5;  8 
 9 import java.io.FileOutputStream; 10 import java.io.IOException; 11 
12 public class FileOutputStreamDemo { 13     public static void main(String[] args) throws IOException { 14         //流對象的構造方法,能夠根據路徑建立文件,若是文件存在則直接清空文件內容!
15         FileOutputStream fos = new FileOutputStream("yinzhengjie.txt"); 16         //寫一個字節數組
17         byte[] bytes = {65,66,67,68,69,70}; 18  fos.write(bytes); 19         //釋放資源
20  fos.close(); 21  } 22 }

3>.字節輸出流FileOutputStream寫字節數組的一部分索引

 1 /*
 2 @author :yinzhengjie  3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
 4 EMAIL:y1053419035@qq.com  5 */
 6 
 7 package cn.org.yinzhengjie.note5;  8 
 9 import java.io.FileOutputStream; 10 import java.io.IOException; 11 
12 public class FileOutputStreamDemo { 13     public static void main(String[] args) throws IOException { 14         //流對象的構造方法,能夠根據路徑建立文件,若是文件存在則直接清空文件內容!
15         FileOutputStream fos = new FileOutputStream("yinzhengjie.txt"); 16         byte[] bytes = {65,66,67,68,69,70}; 17         //寫一個字節數組的一部分,須要傳入數組對象,數組的開始索引,從開始索引開始計算須要寫入的長度
18         fos.write(bytes,0,3); 19         //釋放資源
20  fos.close(); 21  } 22 }

4>.寫入字節數組的簡便方式(寫入字符串)

 1 /*
 2 @author :yinzhengjie  3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
 4 EMAIL:y1053419035@qq.com  5 */
 6 
 7 package cn.org.yinzhengjie.note5;  8 
 9 import java.io.FileOutputStream; 10 import java.io.IOException; 11 
12 public class FileOutputStreamDemo { 13     public static void main(String[] args) throws IOException { 14         //流對象的構造方法,能夠根據路徑建立文件,若是文件存在則直接清空文件內容!
15         FileOutputStream fos = new FileOutputStream("yinzhengjie.txt"); 16         //寫入字符串數組
17         fos.write("yinzhengjie".getBytes()); 18  fos.close(); 19  } 20 }

5>.以追加的方式寫入

 1 /*
 2 @author :yinzhengjie  3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
 4 EMAIL:y1053419035@qq.com  5 */
 6 
 7 package cn.org.yinzhengjie.note5;  8 
 9 import java.io.File; 10 import java.io.FileOutputStream; 11 import java.io.IOException; 12 
13 public class FileOutputStreamDemo { 14     public static void main(String[] args) throws IOException { 15         File file  = new File("yinzhengjie.txt"); 16         //以追加的方式寫入數據,須要在FileOutputStream的構造方法中指定參數爲true.
17         FileOutputStream fos = new FileOutputStream(file,true); 18         //寫入換行符
19         fos.write("\r\n".getBytes()); 20         fos.write("yinzhengjie\r\n".getBytes()); 21  fos.close(); 22  } 23 }

 

二.IO中的異常處理

 1 /*
 2 @author :yinzhengjie  3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
 4 EMAIL:y1053419035@qq.com  5 */
 6 
 7 package cn.org.yinzhengjie.note5;  8 
 9 import java.io.FileOutputStream; 10 import java.io.IOException; 11 
12 public class FileOutputStreamDemo { 13     public static void main(String[] args) { 14         //try 外面聲明變量,try裏面創建對象,也就是將fos的做用域提示,這樣就能夠讓finally做用域能夠訪問到。
15         FileOutputStream fos = null; 16         
17         try { 18             //注意,這裏給的盤符若是不存在的話就會建立失敗,此時fos的值就位null。
19             fos = new FileOutputStream("D:\\10.Java\\JavaSE\\eclipse\\Myprogram\\workspace\\Day8\\yinzhengjie.txt"); 20             fos.write("yinzhengjie".getBytes()); 21             
22         } catch (IOException e) { 23             //若是硬件問題應該讓用戶重試,好比用戶在寫入數據的時候拔掉U盤。
24  System.out.println(e.getMessage()); 25             throw new RuntimeException("文件寫入失敗,請重試!"); 26         }finally { 27             try { 28                 //在釋放資源的時候須要對流對象進行判斷是否爲null,若是不是null。表示對象創建成功,須要關閉資源。
29                 if(fos!=null) { 30  fos.close(); 31  } 32             } catch (IOException e) { 33                 throw new RuntimeException("關閉資源失敗!"); 34  } 35  } 36  } 37 }

 

三.字節輸入流InputStream

  java.io.InputStream此抽象類是表示輸出字節流的全部類的超類。

  做用:將磁盤文件文件內容加載到內存中來。

1>.按照一個字節進行讀取

 1 /*
 2 @author :yinzhengjie  3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
 4 EMAIL:y1053419035@qq.com  5 */
 6 
 7 package cn.org.yinzhengjie.note5;  8 
 9 import java.io.File; 10 import java.io.FileInputStream; 11 import java.io.FileNotFoundException; 12 import java.io.IOException; 13 
14 public class FileInputStreamDemo { 15     public static void main(String[] args) throws IOException { 16         File file = new File("D:\\10.Java\\JavaSE\\eclipse\\Myprogram\\workspace\\Day8\\yinzhengjie.txt"); 17         FileInputStream fis = new FileInputStream(file); 18         int index = 0; 19         //依次讀取一個字節,當讀到文件末尾時index的值爲-1,所以稱爲結束循環的條件。
20         while((index = fis.read()) != -1) { 21             System.out.print((char)index); 22  } 23  fis.close(); 24  } 25 } 26 
27 /*
28 以上代碼執行結果以下: 29 yinzhengjie 30 Java 31 2018 32 Bg Date 33 golang 34 Python 35 Linux 36 shell 37 */

2>.按照一個字節數組進行讀取數據

 1 /*
 2 @author :yinzhengjie  3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
 4 EMAIL:y1053419035@qq.com  5 */
 6 
 7 package cn.org.yinzhengjie.note5;  8 
 9 import java.io.File; 10 import java.io.FileInputStream; 11 import java.io.FileNotFoundException; 12 import java.io.IOException; 13 
14 public class FileInputStreamDemo { 15     public static void main(String[] args) throws IOException { 16         File file = new File("D:\\10.Java\\JavaSE\\eclipse\\Myprogram\\workspace\\Day8\\yinzhengjie.txt"); 17         FileInputStream fis = new FileInputStream(file); 18         //建立字節數組
19         byte[] buf = new byte[4096]; 20         int index ; 21         //依次讀取一個字節,當讀到文件末尾時index的值爲-1,所以稱爲結束循環的條件。
22         while((index = fis.read(buf)) != -1) { 23             //調用字符串的構造方法,將讀取的數據轉換成字符串
24             System.out.print(new String(buf,0,index)); 25  } 26  fis.close(); 27  } 28 } 29 
30 /*
31 以上代碼執行結果以下: 32 yinzhengjie 33 Java 34 2018 35 Bg Date 36 golang 37 Python 38 Linux 39 shell 40 */

 

四.小試牛刀

1>.字節流複製文件讀取單個字節

 1 /*
 2 @author :yinzhengjie  3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
 4 EMAIL:y1053419035@qq.com  5 */
 6 
 7 package cn.org.yinzhengjie.note5;  8 
 9 import java.io.File; 10 import java.io.FileInputStream; 11 import java.io.FileOutputStream; 12 import java.io.IOException; 13 
14 public class FileCopyDemo { 15     public static void main(String[] args) throws IOException { 16         
17     
18         FileInputStream fis = null; 19         FileOutputStream fos = null; 20         
21         try { 22             File src = new File("D:\\10.Java\\JavaSE\\eclipse\\Myprogram\\workspace\\Day8\\yinzhengjie.txt"); 23             File dest = new File("D:\\10.Java\\JavaSE\\eclipse\\Myprogram\\workspace\\Day8\\yinzhengjie.backup"); 24             //創建兩個流的對象,綁定源文件和目標文件
25             fis = new FileInputStream(src); 26             fos = new FileOutputStream(dest); 27             //字節輸入流,讀取一個字節,輸出流寫一個字節
28             int index ; 29             while((index = fis.read()) != -1) { 30  fos.write(index); 31  } 32         }catch(IOException e) { 33  System.out.println(e.getMessage()); 34             throw new RuntimeException("文件複製失敗"); 35         }finally { 36             try { 37                 if(fos != null) { 38  fos.close(); 39  } 40             }catch(IOException e) { 41                 throw new RuntimeException("是否資源失敗"); 42             }finally { 43                 try { 44                     if(fis != null ) { 45  fis.close(); 46  } 47                 }catch(IOException e) { 48                     throw new RuntimeException("釋放資源失敗"); 49  } 50  } 51  } 52  } 53 }

2>.字節流複製文件讀取字節數組

 1 /*
 2 @author :yinzhengjie  3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
 4 EMAIL:y1053419035@qq.com  5 */
 6 
 7 package cn.org.yinzhengjie.note5;  8 
 9 import java.io.File; 10 import java.io.FileInputStream; 11 import java.io.FileOutputStream; 12 import java.io.IOException; 13 
14 public class FileCopyDemo { 15     public static void main(String[] args) throws IOException { 16         FileInputStream fis = null; 17         FileOutputStream fos = null; 18         
19         try { 20             File src = new File("D:\\10.Java\\JavaSE\\eclipse\\Myprogram\\workspace\\Day8\\yinzhengjie.txt"); 21             File dest = new File("D:\\10.Java\\JavaSE\\eclipse\\Myprogram\\workspace\\Day8\\yinzhengjie.backup2"); 22             //創建兩個流的對象,綁定源文件和目標文件
23             fis = new FileInputStream(src); 24             fos = new FileOutputStream(dest); 25             //定義字節數組,緩衝數據
26             byte[] buf = new byte[4096]; 27             //讀取數組,寫入數組
28             int index; 29             while((index = fis.read(buf)) != -1) { 30                 fos.write(buf,0,index); 31  } 32         }catch(IOException e) { 33  System.out.println(e.getMessage()); 34             throw new RuntimeException("文件複製失敗"); 35         }finally { 36             try { 37                 if(fos != null) { 38  fos.close(); 39  } 40             }catch(IOException e) { 41                 throw new RuntimeException("是否資源失敗"); 42             }finally { 43                 try { 44                     if(fis != null ) { 45  fis.close(); 46  } 47                 }catch(IOException e) { 48                     throw new RuntimeException("釋放資源失敗"); 49  } 50  } 51  } 52  } 53 }

相關文章
相關標籤/搜索