OutputStream-InputStream-FileOutputStream-FileInputStream-BufferedOutputStream-BufferedInputStream

一.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("操作完成");
}
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章