一、位元組流復制文本檔案
需求:把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();
?
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/457045.html
標籤:其他
