一、字節流復制文本文件
需求:把E盤下的abc.txt文件復制到F盤下的abc.txt中
分析:
1.復制文本文件,其實就是把文本文件的內容從一個文件中讀出(數據源),然后寫入到另一個文件中(目的地)
2.數據源:E:\\abc.txt ——>需要讀數據——>InputStream——>最終實現類FileInputStream
3.目的地:F:\\abc.txt——>需要寫數據——>OutputStream——>最終實現類FileInputStream
步驟:
1.根據數據源創建字節輸入流對象
2.根據目的地創建字節輸出流對象
3.讀寫數據,復制文本文件(一次讀取一個字節、一次寫入一個字節;)
4.釋放資源
/*需求:把E盤下的abc.txt文件復制到F盤下的abc.txt中
分析:
1.復制文本文件,其實就是把文本文件的內容從一個文件中讀出(數據源),然后寫入到另一個文件中(目的地)
2.數據源:E:\\\abc.txt ——>需要讀數據——>InputStream——>最終實現類FileInputStream
3.目的地:F:\\\abc.txt——>需要寫數據——>OutputStream——>最終實現類FileInputStream
步驟:
1.根據數據源創建字節輸入流對象
2.根據目的地創建字節輸出流對象
3.讀寫數據,復制文本文件(一次讀取一個字節、一次寫入一個字節;建議使用循環方式)
4.釋放資源
* */
public class Demo02 {
public static void main(String[] args) throws IOException {
//根據數據源創建字節輸入流對象
FileInputStream fips=new FileInputStream("E:\\abc.txt");
//根據目的地創建字節輸出流對象
FileOutputStream fops=new FileOutputStream("F:\\abc.txt");
//讀寫數據,復制文本文件(一次讀取一個字節、一次寫入一個字節;建議使用循環方式)
int by;
while((by=fips.read())!=-1){
fops.write(by);
}
//釋放資源
fops.close();
fips.close();
}
}
二、字節流復制圖片
需求:把E盤下的123.jpg圖片復制到F盤下的123.jpgt中
步驟:
1.根據數據源創建字節輸入流對象
2.根據目的地創建字節輸出流對象
3.讀寫數據,復制圖片(一次讀取一個字節數組數據、一次寫入一個字節數組數據;)
4.釋放資源
/*需求:把E盤下的123.jpg圖片復制到F盤下的123.jpgt中
步驟:
1.根據數據源創建字節輸入流對象
2.根據目的地創建字節輸出流對象
3.讀寫數據,復制圖片(一次讀取一個字節數組數據、一次寫入一個字節數組數據;)
4.釋放資源
* */
public class Demo03 {
public static void main(String[] args) throws IOException {
//根據數據源創建字節輸入流對象
FileInputStream fips=new FileInputStream("E:\\123.jpg");
FileOutputStream fops=new FileOutputStream("F:\\123.jpg");
//讀寫數據,復制圖片(一次讀取一個字節數組數據、一次寫入一個字節數組數據;)
byte[]bytes=new byte[1024];
int len;
while((len=fips.read(bytes))!=-1){
fops.write(new String(bytes,0,len).getBytes);
fops.flush();//清除緩存
}
//釋放資源
fops.close();
fips.close();
}
}
容易出現的問題:
我在寫完之后發現復制后的圖片雙擊打不開,再回去看代碼,也沒幾行,我覺得問題應該是出在了字節數組轉字符串再轉字節數組那一行,猜測應該是二進制數據在轉成字符串后出現了問題,再轉回去的數據不是之前的了,所以寫入的數據不是之前的圖片的二進制數據,才會出現損壞或不被識別。 嘗試對這一行進行修改,既然轉String出現問題,那么就不轉了,直接寫字節數組
/*需求:把E盤下的123.jpg圖片復制到F盤下的123.jpgt中
步驟:
1.根據數據源創建字節輸入流對象
2.根據目的地創建字節輸出流對象
3.讀寫數據,復制圖片(一次讀取一個字節數組數據、一次寫入一個字節數組數據;)
4.釋放資源
* */
public class Demo03 {
public static void main(String[] args) throws IOException {
//根據數據源創建字節輸入流對象
FileInputStream fips=new FileInputStream("E:\\123.jpg");
FileOutputStream fops=new FileOutputStream("F:\\123.jpg");
//讀寫數據,復制圖片(一次讀取一個字節數組數據、一次寫入一個字節數組數據;)
byte[]bytes=new byte[1024];
int len;
while((len=fips.read(bytes))!=-1){
fops.write(bytes,0,len);
fops.flush();//清除緩存
}
//釋放資源
fops.close();
fips.close();
}
}
完美解決!!!
三、字節流復制視頻
需求:把E盤下的123.mp4圖片復制到F盤下的123.mp4t中
步驟:
1.根據數據源創建字節輸入流對象
2.根據目的地創建字節輸出流對象
3.讀寫數據,復制視頻(4種方式,基本字節流一次讀寫一個字節、一次讀寫一個字節數組數據;字節緩沖流一次讀寫一個字節、一次讀寫一個字節數組)
4.釋放資源
/*需求:把E盤下的123.mp4圖片復制到F盤下的123.mp4
步驟:
1.根據數據源創建字節輸入流對象
2.根據目的地創建字節輸出流對象
3.讀寫數據,復制視頻(4種方式,基本字節流一次讀寫一個字節、一次讀寫一個字節數組數據;字節緩沖流一次讀寫一個字節、一次讀寫一個字節數組)
4.釋放資源
* */
public class Demo05 {
public static void main(String[] args) throws IOException {
//記錄開始時間
long startime=System.currentTimeMillis();
//方式一
method1();
//方式二
method2();
//方式三
method3();
//方式4
method4();
//記錄結束時間
long endtime= System.currentTimeMillis();
System.out.println("共用時"+(endtime-startime)+"毫秒");
}
//方法一,使用基本字節流實現一次讀取一個字節
public static void method1() throws IOException {
FileOutputStream fops=new FileOutputStream("F:\\123.mp4");
FileInputStream fips=new FileInputStream("E:\\123.mp4");
//一次讀取一個數據
int by;
while((by=fips.read())!=-1){
fops.write(by);
}
fops.close();
fips.close();
}
//方法二,一次讀取一個字節數組數據
public static void method2() throws IOException {
FileInputStream fips=new FileInputStream("E:\\123.mp4");
FileOutputStream fops=new FileOutputStream("F:\\123.mp4");
//一次讀取一個數據
byte []bytes=new byte[1024];
int len;
while((len=fips.read(bytes))!=-1){
fops.write(bytes,0,len);
}
fops.close();
fips.close();
}
//方法三,使用字節緩沖流一次讀取一個字節
public static void method4() throws IOException {
//創建字節緩沖流對象
BufferedInputStream bips=new BufferedInputStream(new FileInputStream("E:\\123.mp4"));
BufferedOutputStream bops=new BufferedOutputStream(new FileOutputStream("F:\\123.mp4"));
//一次讀取一個字節數據
int by;
while((by=bips.read())!=-1){
bops.write(by);
}
bips.close();
bops.close();
}
//方法四,使用字節緩沖流一次讀取一個字節數組數據
public static void method3() throws IOException {
//創建字節緩沖流對象
BufferedInputStream bips=new BufferedInputStream(new FileInputStream("E:\\123.mp4"));
BufferedOutputStream bops=new BufferedOutputStream(new FileOutputStream("F:\\123.mp4"));
//一次讀取一個字節數組數據
byte []bytes=new byte[1024];
int len;
while((len=bips.read(bytes))!=-1){
bops.write(bytes,0,len);
}
bips.close();
bops.close();
}
}