1.概念java
流按操做類型分爲兩種:設計模式
2.IO流經常使用父類數組
字節流的抽象父類:ui
字符流的抽象父類:加密
3.IO程序書寫spa
import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; public class Demo1_FileInputStream { public static void main(String[] args) throws IOException { // demo1(); FileInputStream fis = new FileInputStream("xxx.txt"); //建立一個文件輸入流對象,並關聯xxx.txt int b; //定義變量,記錄每次讀到的字節 while((b = fis.read()) != -1) { //將每次讀到的字節賦值給b並判斷是不是-1 System.out.println(b); //打印每個字節 } fis.close(); //關閉流釋放資源 } private static void demo1() throws FileNotFoundException, IOException { FileInputStream fis = new FileInputStream("xxx.txt");//建立流對象 int x = fis.read(); //從硬盤上讀取一個字節 System.out.println(x); int y = fis.read(); System.out.println(y); int z = fis.read(); System.out.println(z); int a = fis.read(); System.out.println(a); int b = fis.read(); System.out.println(b); fis.close(); //關流釋放資源 } }
import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; public class Demo2_FileOutputStream { public static void main(String[] args) throws IOException { FileOutputStream fos = new FileOutputStream("yyy.txt"); //自動建立沒有的對象 fos.write(97); //雖然寫出的是一個int數,可是到文件上的是一個字節,會自動去除前三個八位 fos.write(98); fos.write(99); fos.close(); } }
public static void main(String[] args) throws IOException { // demo1(); FileOutputStream fos = new FileOutputStream("yyy.txt",true);//追加在第二個參數傳true fos.write(97); fos.write(98); fos.close(); }
import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; public class Demo3_Copy { public static void main(String[] args) throws IOException { // demo1(); FileInputStream fis = new FileInputStream("視頻.avi"); //建立輸入流對象,關聯視頻 FileOutputStream fos = new FileOutputStream("copy.avi"); //建立輸出流對象,關聯copy.avi int b; while((b = fis.read()) != -1) { //在不斷讀取每一個字節 fos.write(b); //將每個字節寫出 } fis.close(); //關流釋放資源 fos.close(); } private static void demo1() throws FileNotFoundException, IOException { FileInputStream fis = new FileInputStream("圖片1.png"); //建立輸入流對象,關聯圖片 FileOutputStream fos = new FileOutputStream("copy.jpg"); //建立輸出流對象,關聯cop.jpg int b; while((b = fis.read()) != -1) { //在不斷讀取每一個字節 fos.write(b); //將每個字節寫出 } fis.close(); //關流釋放資源 fos.close(); } }
A:案例演示設計
A:案例演示code
import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class Demo3_Copy { public static void main(String[] args) throws IOException { //第二種拷貝,不推薦,有可能致使內存溢出 FileInputStream fis = new FileInputStream("視頻.avi"); //建立輸入流對象,關聯視頻 FileOutputStream fos = new FileOutputStream("copy.avi"); //建立輸出流對象,關聯copy.avi // int len = fis.available(); // System.out.println(len); byte[] arr = new byte[fis.available()]; //建立與文件同樣大小的字節數組 fis.read(arr); //將文件上的字節讀取到內存中 fos.write(arr); //將字節數組中的字節數據寫到文件上 fis.close(); fos.close(); } }
import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; public class Demo4_ArrayCopy { public static void main(String[] args) throws IOException { // demo1(); FileInputStream fis = new FileInputStream("xxx.txt"); FileOutputStream fos = new FileOutputStream("yyy.txt"); byte[] arr = new byte[2]; int len; while((len = fis.read(arr)) != -1) { fos.write(arr,0,len); } fis.close(); fos.close(); } private static void demo1() throws FileNotFoundException, IOException { FileInputStream fis = new FileInputStream("xxx.txt"); byte[] arr = new byte[2]; int a = fis.read(arr); //將文件上的字節讀取到字節數組中 System.out.println(a); //讀到的有效字節個數 for (byte b : arr) { //第一次獲取到文件上的a和b System.out.println(b); } System.out.println("----"); int c = fis.read(arr); System.out.println(c); for (byte b : arr) { System.out.println(b); } fis.close(); } }
A:案例演示視頻
public static void main(String[] args) throws IOException { FileInputStream fis = new FileInputStream("視頻.avi"); FileOutputStream fos = new FileOutputStream("copy.avi"); byte[] arr = new byte[1024 * 8]; int len; while((len = fis.read(arr)) != -1) { //忘記寫arr,返回的是碼錶值 fos.write(arr,0,len); } fis.close(); fos.close(); }
A:緩衝思想對象
B.BufferedInputStream
C.BufferedOutputStream
D.小數組的讀寫和帶Buffered的讀取哪一個更快?
import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class Demo5_BufferCopy { public static void main(String[] args) throws IOException { FileInputStream fis = new FileInputStream("視頻.avi"); //建立輸入流對象 FileOutputStream fos = new FileOutputStream("copy.avi");//建立輸出流對象 //byte[] arr = new byte[8192]; BufferedInputStream bis = new BufferedInputStream(fis);//建立緩衝區對象,對輸入流進行包裝,讓其變得更強 BufferedOutputStream bos = new BufferedOutputStream(fos); int b; while((b = bis.read()) != -1) { bos.write(b); } bis.close(); bos.close(); } }
flush()方法
close()方法
public static void main(String[] args) throws IOException { BufferedInputStream bis = new BufferedInputStream(new FileInputStream("視頻.avi")); BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("copy.mp3")); int b; while((b = bis.read()) != -1) { bos.write(b); bos.flush(); } // bos.close(); // bis.close(); }
字節流讀取中文的問題
字節流寫出中文的問題
import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; public class Demo6_Chinese { public static void main(String[] args) throws IOException { // demo1(); FileOutputStream fos = new FileOutputStream("zzz.txt"); fos.write("同九年,汝獨秀".getBytes()); fos.write("\r\n".getBytes()); fos.close(); } private static void demo1() throws FileNotFoundException, IOException { FileInputStream fis = new FileInputStream("yyy.txt"); byte[] arr = new byte[4]; int len; while((len = fis.read(arr)) != -1) { System.out.println(new String(arr,0,len)); } fis.close(); } }
import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class Demo7_TryFinally { public static void main(String[] args) throws IOException { FileInputStream fis = null; FileOutputStream fos = null; try { fis = new FileInputStream("xxx.txt"); fos = new FileOutputStream("yyy.txt"); int b; while((b = fis.read()) != -1) { fos.write(b); } }finally { try { if(fis != null) fis.close(); }finally { //try fianlly的目的是儘可能關閉 if(fos != null) fos.close(); } } } }
原理
import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class Demo7_TryFinally { public static void main(String[] args) throws IOException { try( FileInputStream fis = new FileInputStream("xxx.txt"); FileOutputStream fos = new FileOutputStream("yyy.txt"); MyClose mc = new MyClose(); ){ int b; while((b = fis.read()) != -1) { fos.write(b); } } } } class MyClose implements AutoCloseable{ //實現AutoCloseable,自動調用close(); public void close() { System.out.println("我關了"); } }
import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class Demo8_test { public static void main(String[] args) throws IOException { BufferedInputStream bis = new BufferedInputStream(new FileInputStream("圖片1.jpg")); BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("copy.jpg")); int b; while((b = bis.read()) != -1) { bos.write(b ^ 123);//將寫出的字節異或上一個數,這個數就是祕鑰,解密再異或就行 } bis.close(); bos.close(); } }
import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.Scanner; public class Demo9_test { public static void main(String[] args) throws IOException { File file = getFile(); //獲取文件 BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file)); BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file.getName())); int b; while((b = bis.read()) != -1) { bos.write(b); } bis.close(); bos.close(); } //定義一個方法獲取鍵盤錄入的文件路徑,並封裝成file對象返回 //返回值類型:File 參數列表:無 public static File getFile() { Scanner sc = new Scanner(System.in);//建立鍵盤錄入對象 System.out.println("請輸入一個文件的路徑:"); while(true) { String line = sc.nextLine(); //接收鍵盤錄入的路徑 File file = new File(line); //封裝成File對象,並對其判斷 if(!file.exists()) { System.out.println("您錄入的文件路勁不存在,請從新錄入:"); }else if(file.isDirectory()) { System.out.println("您錄入的是文件夾路徑,請從新錄入:"); }else { return file; //彈棧返回路徑 } } } }
import java.io.FileOutputStream; import java.io.IOException; import java.util.Scanner; public class Demo10_test { public static void main(String[] args) throws IOException { Scanner sc = new Scanner(System.in); //建立鍵盤錄入對象 FileOutputStream fos = new FileOutputStream("text.txt");//建立輸出流對象,關聯text.txt文件 System.out.println("請輸入數據:"); while(true) { String line = sc.nextLine(); //將鍵盤錄入的數據存儲在line中 if("quit".equals(line)) { break; //遇到quit退出循環 } fos.write(line.getBytes()); //字符串寫出必須轉換成字節數組 fos.write("\r\n".getBytes()); } fos.close(); } }