大家在Java開發中都會遇到文件復制的文件,眾所周知,需要通過文件輸入輸出流實現。
那究竟該怎么做那,話不多說,直接上代碼:
一,使用字節流復制文件
public class FileByteCopy {
public static void main(String[] args) {
FileByteCopy f= new FileByteCopy();
try {
f.copy("d:/File/1.txt","d:/CopyFile/1.txt");
} catch (Exception e) {
e.printStackTrace();
}
}
public void copy(String f1,String f2) throws Exception{
FileInputStream fis = new FileInputStream(f1); //首先構建輸入流的對象,指定需要讀取的文件路徑
FileOutputStream fos = new FileOutputStream(f2,false); //構建文件輸出流的對象,即將文件復制在哪里去,后面的true代表每次寫入時不清空當前文件內容
//方法一,單字節復制
// int value = fis.read(); / //一個字節一個字節的讀取文件的內容
// while(value!=-1){
// fos.write(value);
// fos.flush();
// value = fis.read();
// }
//方法二 以字節數組為單位傳遞 (一次傳遞一個大小自定義的數組)
byte [] bytes = new byte[1024];
int len=fis.read(bytes); //把讀取的字節存入到字節數組中 此時的len為文件中的大小,注意不一定是1024。下圖中的95字節即為對應的源文件的len值
while(len!=-1){
// fos.write(bytes); //使用這種方法,如果源文件大小不是1024,,復制后的文件也會是1024。因為一次讀取的最小的都是1024,詳細見下圖。
復制前
復制后
fos.write(bytes, 0, len); //從偏移量0開始到len(95)寫入字符,可以保證源文件和復制后的文件大小一致。
fos.flush();
len=fis.read(bytes);
}
//讀取完畢后關閉流
fis.close();
fos.close();
}
}
二,使用字符流復制文件(與字節流同理)
public class FileCharCopy {
public static void main(String[] args) {
FileCharCopy f = new FileCharCopy();
try {
f.copy("d:/File/1.txt","d:/CopyFile/1.txt");
} catch (Exception e) {
e.printStackTrace();
}
}
public void copy(String f1,String f2) throws Exception{
FileReader fr = new FileReader(f1);
FileWriter fw =new FileWriter(f2,false);
//int value=fr.read();
//while(value!=-1){
//fw.write(value);
//fw.flush();
//value=fr.read();
//}
char [] chars = new char[1024];
int len =fr.read(chars);
while(len!=-1){
fw.write(chars, 0, len);
fw.flush();
len =fr.read(chars);
}
fr.close();
fw.close();
}