一.OutputStream 類(java.io)
概述:OutputStream類就是專門用於從程序中將數據寫入到介質中;
定義:public abstract class OutputStream extends Object implements Closeable, Flushable
OutputStream類:此抽象類是表示輸出字節流的所有類的超類。
注意:io流不能操作文件夾(文件夾中當然不能直接寫內容)
操作的最小單位是bit
存儲的最小單位是byte
1byte = 8 bit
二.FileOutputStream 類(java.io)
概述:OutputStream常用子類:;
構造方法:
FileOutputStream(String name) :創建一個向具有指定名稱的文件中寫入數據的輸出文件流。
Name表示一個文件的路徑,可以是相對的也可以是絕對的!
FileOutputStream(File file) :創建一個向指定 File 對象表示的文件中寫入數據的文件輸出流.
續寫:
FileOutputStream(File file, boolean append):創建一個向指定 File 對象表示的文件中寫入數據的文件輸出流
需要傳遞append的值爲:true即可;
FileOutputStream(String name, boolean append):創建一個向具有指定 name 的文件中寫入數據的輸出文件流。
換行:
使用字符流的時候,可以直接寫入:“\r\n”;
使用字節流的時候,需要寫入“\r\n”的字節數組;
常用方法:
public void write(byte[] b){}: b.length 個字節從指定 byte 數組寫入此文件輸出流中。
public void write(byte[] b, int off, int len){}:將指定 byte 數組中從偏移量 off 開始的 len 個字節寫入此文件輸出流。
public void write (int b){}:將指定字節寫入此文件輸出流.
public void close(){}:關閉此文件輸出流並釋放與此流有關的所有系統資源。
String 類的一個常用方法:
public byte[] getBytes(){}:使用平臺的默認字符集將此 String 編碼爲 byte 序列,並將結果存儲到一個新的 byte 數組中。
三.InputSteam 類(java.io)
定義:public abstract class InputStream extends Object implements Closeable
概述:InputStream 此抽象類是表示字節輸入流的所有類的超類。
四.FileInputStream 類(java.io)
概述:InputStream 類的常用子類;FileInputStream 類是專門用於從文件中讀取字節數據的流,讀取到的內容以十進制的數據的形式返回;
如果想要將十進制的數據轉換成對應的字符,需要程序員對照碼錶轉換;
具體轉換方式有2種:
1:直接強轉成char類型的字符;(適用於一個數字)
2:使用String類的構造方法;(適用於一個或多個數字)
構造方法:
FileInputStream(String name):通過打開一個到實際文件的連接來創建一個 FileInputStream,
該文件通過文件系統中的路徑名 name 指定。
FileInputStream(File file):通過打開一個到實際文件的連接來創建一個 FileInputStream,
該文件通過文件系統中的 File 對象 file 指定。
常用方法:
public int read(){}:從此輸入流中讀取一個數據字節。返回的是讀取到的這個字節的碼值!
public int read(byte[] b){}:從此輸入流中將最多 b.length 個字節的數據讀入一個 byte 數組中。返回的是讀取到的字節的個數!
public int read(byte[] b, int off, int len){}:從此輸入流中將最多 len 個字節的數據讀入一個 byte 數組中。返回的是讀取到的字節的個數!
public void close(){}:關閉此文件輸入流並釋放與此流有關的所有系統資源。
五.BufferedOutputStream 類(java.io)
定義:public class BufferedOutputStream extends FilterOutputStream
屬於OutputStream的孫子類
構造方法:BufferedOutputStream(OutputStream out) 創建一個新的緩衝輸出流,以將數據寫入指定的底層輸出流。
六.BufferedInputStream 類(java.io)
定義:public class BufferedInputStream extends FilterInputStream
構造方法:BufferedInputStream(InputStream in) 創建一個 BufferedInputStream 並保存其參數,即輸入流in,以便將來使用。
七.四種方式複製文件:
1:高效流加數組
//1:高效流加數組,複製"E:\\JAVAPractice\\IO\\1.jpg" import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io.BufferedOutputStream; import java.io.FileOutputStream; import java.io.IOException; public class Copy01{ public static void main(String[] args) throws IOException{ //抓取開始時間 long t1 = System.currentTimeMillis(); //創建高效流 BufferedInputStream bin = new BufferedInputStream(new FileInputStream("E:\\JAVAPractice\\IO\\1.jpg")); BufferedOutputStream bout = new BufferedOutputStream(new FileOutputStream("E:\\JAVAPractice\\IO\\1_1.jpg")); //定義字節數組存儲讀取內容 byte[] b = new byte[1024]; int i = -1;//讀取到的字節個數 while((i = bin.read(b)) != -1){ bout.write(b,0,i); bout.flush(); } bout.close(); bin.close(); //抓取程序結束時間 long t2 = System.currentTimeMillis(); System.out.println("耗時:"+(t2-t1)/1000.0);//耗時:0.25 } }
2:基本流加數組
//基本流加數組,複製"E:\\JAVAPractice\\IO\\1.jpg import java.io.FileOutputStream; import java.io.FileInputStream; import java.io.IOException; public class Copy02{ public static void main(String[] args) throws IOException{ //記錄程序開始時間 long t1 = System.currentTimeMillis(); //創建基本字節流對象 FileInputStream in = new FileInputStream("E:\\JAVAPractice\\IO\\1.jpg"); FileOutputStream out = new FileOutputStream("E:\\JAVAPractice\\IO\\1_2.jpg"); //定義數組存儲讀取到的數據 byte[] b = new byte[1024]; int i = -1;//讀取到的字節個數 while((i = in.read(b)) != -1){ out.write(b,0,i); out.flush(); } //關閉流 in.close(); out.close(); //記錄程序結束時間 long t2 = System.currentTimeMillis(); System.out.println("耗時:"+(t2-t1)/1000.0);//耗時:0.344 } }
3:高效流逐字節
//高效流逐字節,複製"E:\\JAVAPractice\\IO\\1.jpg import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io.BufferedOutputStream; import java.io.FileOutputStream; import java.io.IOException; public class Copy03{ public static void main(String[] args) throws IOException{ //記錄系統時間 long t1 = System.currentTimeMillis(); //創建高效字符流 BufferedInputStream bin = new BufferedInputStream(new FileInputStream("E:\\JAVAPractice\\IO\\1.jpg")); BufferedOutputStream bout = new BufferedOutputStream(new FileOutputStream("E:\\JAVAPractice\\IO\\1_3.jpg")); //定義i爲ASCII碼值 int i = -1; while((i = bin.read()) != -1){ bout.write(i); } //關閉流 bin.close(); bout.close(); //記錄系統時間 long t2 = System.currentTimeMillis(); System.out.println("耗時:"+(t2-t1)/1000.0);//耗時:0.625 } }
4:基本流逐字節複製
//基本流逐字節複製,E:\\JAVAPractice\\IO\\1.jpg import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class Copy04{ public static void main(String[] args) throws IOException{ //記錄系統時間 long t1 = System.currentTimeMillis(); //創建基本字節流對象 FileInputStream in = new FileInputStream("E:\\JAVAPractice\\IO\\1.jpg"); FileOutputStream out = new FileOutputStream("E:\\JAVAPractice\\IO\\1_4.jpg"); //定義不在ASCII碼值範圍內的i int i = -1; while((i = in.read()) != -1){ out.write(i); out.flush(); } //關閉流 out.close(); in.close(); //記錄系統時間 long t2 = System.currentTimeMillis(); System.out.println("耗時:"+(t2-t1)/1000.0);//耗時:52.383 } }
八.單層文件夾複製
//複製E:\\JAVAPractice\\IO\\demo該單層文件夾下所有txt格式文件 import java.io.File; import java.io.IOException; import java.io.FileInputStream; import java.io.FileOutputStream; public class DirCopy{ public static void main(String[] args) throws IOException{ //創建源文件夾對象 File src = new File("E:\\JAVAPractice\\IO\\demo"); //創建目標文件夾對象 File dest = new File("E:\\JAVAPractice\\IO\\democopy"); dest.mkdir(); //獲取源文件夾中所有對象 File[] files = src.listFiles(); //迭代 for(File f : files){ //將所有文件包裝成輸入流對象 FileInputStream in = new FileInputStream(f); //i表示讀取的字節數 int i = -1; byte[] b = new byte[1024]; //準備輸出流對象 File fileOut = new File(dest,f.getName()); FileOutputStream out = new FileOutputStream(fileOut); while((i = in.read(b)) != -1){ out.write(b,0,i); out.flush(); } out.close();//out在foreach內定義,所以在foreach內關閉 in.close();//同上 } System.out.println("操作完成"); } }