IO流的概述及其分類
流按操做類型分爲兩種:java
字節流的抽象父類:InputStream OutputStream數組
字符流的抽象方法:Reader Writeride
InputStream實現類FileInputStream
InputStream是抽象類,表示字節輸入流加密
FileInputStream從文件系統中的某個文件中得到輸入字節。FileInputStream用於讀取圖像數據之類的原始字節流。要讀取字符流,就要用FileReaderspa
構造方法:code
FileInputStream的構造方法能夠傳一個File對象,也能夠傳一個字符串路徑對象
成員方法:blog
案例:讀取一個txt文件數據繼承
package null08031628; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; public class Demo01 { public static void main(String[] args) throws IOException { // TODO Auto-generated method stub File file = new File("C:/Users/Administrator/Desktop/baiduyunpan.txt"); FileInputStream fis = new FileInputStream(file); int i = 0; while((i = fis.read()) != -1){ System.out.println(i); }
fis.close();
} }
OutputStream實現類FileOutputStream文件輸出流
文件輸出流就是用於將數據寫入File的輸出流接口
案例:從一個文件讀入數據寫入另外一個文件package null08031638;import java.io.File;
import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; public class Demo01 { public static void main(String[] args) throws IOException { // TODO Auto-generated method stub File filein = new File("C:/Users/Administrator/Desktop/baiduyunpan.txt"); InputStream fis = new FileInputStream(filein); //建立一個輸入流 File fileout = new File("C:/Users/Administrator/Desktop/baiduyunpan-2.txt"); OutputStream fos = new FileOutputStream(fileout); //建立一個輸出流 int i = 0; while((i=fis.read())!=-1){ fos.write(i); }
fos.close();
fis.close();
} }
經過available()方法,進行字節數組拷貝(錯誤的,不推薦的,若是文件超級大怎麼辦?)
package null08031700; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class Demo01 { public static void main(String[] args) throws IOException { // TODO Auto-generated method stub FileInputStream input = new FileInputStream("C:/Users/Administrator/Desktop/baiduyunpan.txt"); FileOutputStream out = new FileOutputStream("C:/Users/Administrator/Desktop/baiduyunpan-3.txt"); byte[] bs = new byte[input.available()];//定義一個文件輸入流那麼大的字節數組 input.read(bs); //一次性將數據寫入到字節數組中 out.write(bs); //一次性將文件寫入 input.close(); out.close(); } }
自定義一個大小的數組,進行一個流的讀寫(正確的方法)
package null08031707; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class Demo01 { public static void main(String[] args) throws IOException { // TODO Auto-generated method stub FileInputStream input = new FileInputStream("C:/Users/Administrator/Desktop/baiduyunpan.txt"); FileOutputStream out = new FileOutputStream("C:/Users/Administrator/Desktop/baiduyunpan-3.txt"); byte[] bs = new byte[8*1024]; int i = 0; while((i=input.read(bs))!=-1){ out.write(i); } out.close(); input.close(); } }
經過字節數組的方法操做流,其實就是至關因而建立了一個緩衝區
自帶緩衝區的實現類BufferedInputStream和BufferedOutputStream
BufferedInputStream
BufferedOutputStream
一個小小的例子:
package null08031732; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class Demo01 { public static void main(String[] args) throws IOException { // TODO Auto-generated method stub FileInputStream fis = new FileInputStream("C:/Users/Administrator/Desktop/baiduyunpan.txt"); BufferedInputStream bis = new BufferedInputStream(fis); FileOutputStream fos = new FileOutputStream("C:/Users/Administrator/Desktop/baiduyunpan-4.txt"); BufferedOutputStream bos = new BufferedOutputStream(fos); int i; while((i=bis.read())!=-1){ bos.write(i); } bis.close(); bos.close(); } }
補充
字節流讀寫中文時亂碼的問題
字節流讀取中文:
字節流寫入中文的問題:
package null08041019; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class Demo01 { public static void main(String[] args) throws IOException { // TODO Auto-generated method stub FileInputStream fis = null; FileOutputStream fos = null; try{ fis = new FileInputStream(""); fos = new FileOutputStream(""); int b; while((b=fis.read())!=-1){ fos.write(b); } }finally{ try{ fis.close(); }finally{ fos.close(); } } } }
package null08041024; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class Demo01 { public static void main(String[] args) throws IOException { // TODO Auto-generated method stub try( //寫在括號中的代碼,執行完成後,會自動調用對象的close方法 //能寫在括號中的代碼的類必定是要繼承AutoCloseable接口的類 FileInputStream fis = new FileInputStream(""); FileOutputStream fos = new FileOutputStream(""); ){ int i; while((i=fis.read())!=-1){ fos.write(i); } } } }
package null08041031; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.Scanner; public class Demo01 { public static void main(String[] args) throws IOException { Scanner sc = new Scanner(System.in); System.out.println("請將圖片放到和此文件的同級目錄下"); System.out.println("請輸入要加密的文件名:"); String fileName = sc.nextLine(); System.out.println("請輸入加密後的文件名:"); String endFileName = sc.nextLine(); System.out.println("請輸入密碼:"); String pwd = sc.nextLine(); int pwdInt = Integer.parseInt(pwd); try( FileInputStream fis = new FileInputStream(fileName); FileOutputStream fos = new FileOutputStream(endFileName); ){ int i; while((i=fis.read())!=-1){ fos.write(i^pwdInt); } }finally{ System.out.println("加密結束"); } } }