1. 知識點
1,首先不管是InputStream讀read,還是OutputStream寫write,都支援讀寫一定長度的byte[]。
2,當然,還支援一個位元組一個位元組的讀寫,那麼一個位元組一個位元組的讀寫,讀出來的位元組和寫入的位元組都是用的int類型的參數。
3,int參數隻會使用它的8個二進制位,也就是說類似于将int強行轉換為byte,我感覺很無聊的設計,還不如直接用byte作為參數,這樣搞是因為int太火嗎?
4,是以所謂的複制,就是把所有的位元組讀出來,然後寫入檔案即可。
2. 寫入檔案示例
寫入對象FILE_FOR_WRITE中

package com.maoge.stream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
public class OutputStreamDemo {
public static void main(String[] args){
writeToFile();
}
public static void writeToFile(){
byte buffer[]=buffer=new String("hello world!").getBytes();
OutputStream out=null;
try {
out = new FileOutputStream(StreamUtils.FILE_FOR_WRITE);
out.write(buffer, 0, buffer.length);
} catch (Exception ex) {
System.out.println(ex.toString());
}finally{
try {
out.close();
} catch (IOException ioEx) {
System.out.println(ioEx.toString());
}
}
}
}
3. 檔案複制示例
直接示範複制圖檔,因為圖檔也是二進制位組成的
源檔案test.jpg這個需要找個圖檔,目的檔案result.jpg這個是複制後生産的
//工具類
package com.maoge.stream;
import java.io.File;
public class StreamUtils {
//用于定義每次讀取的長度
public static final int BUFFER_LENGTH=512;
//檔案對象
public static File FILE_FOR_READ;
public static File FILE_FOR_WRITE;
static{
FILE_FOR_READ=new File("C:\\test.jpg");
FILE_FOR_WRITE=new File("C:\\result.jpg");
}
}
複制過程,該方法是OutputStreamDemo類的靜态方法。
public static void fileCopy(){
FileInputStream in=null;
FileOutputStream out=null;
try {
in=new FileInputStream(StreamUtils.FILE_FOR_READ);
out=new FileOutputStream(StreamUtils.FILE_FOR_WRITE);
int c;
while((c=in.read())!=-1)
out.write(c);
} catch (Exception ex) {
System.out.println(ex.toString());
}finally{
try {
in.close();
} catch (IOException ioEx) {
System.out.println(ioEx.toString());
}
try {
out.close();
} catch (IOException ioEx) {
System.out.println(ioEx.toString());
}
}
}