java使用字節流和字符流實現文件復制


大家在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();
}

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM