步骤:
(1) 要复制文件,首先得先要有文件;
(2) 然后把文件里面的内容读取到输入流中;
(3) 再把输入流中的内容写到输出流中;
(4) 再从输出流中写入到目的文件中;
(5) 最后牢记要关闭流通道。
① 当文件得大小超过 int 时,应该分开一部分一部分的传,同时传时会溢出,用byte数组当做缓冲区。注意关闭流的顺序。
1 package copy; 2 3 import java.io.File; 4 import java.io.FileInputStream; 5 import java.io.FileNotFoundException; 6 import java.io.FileOutputStream; 7 import java.io.IOException; 8 import java.io.InputStream; 9 import java.io.OutputStream; 10 11 public class Test1 { 12 13 public static void main(String[] args) { 14 // TODO Auto-generated method stub 15 File from = new File("D:/安装包/java/eclipse-jee-oxygen-2-win32-x86_64.zip"); 16 File to = new File("D:/"+from.getName()); 17 try { 18 InputStream is = new FileInputStream(from); 19 OutputStream os = new FileOutputStream(to,true); 20 byte[] b = new byte[1024]; 21 int i =is.read(b); 22 while(i!=-1) { 23 os.write(b, 0, i); 24 i=is.read(b); 25 System.out.println(i); 26 } 27 os.close();//先关闭输出流 28 is.close();//再关闭输入流 29 } catch (FileNotFoundException e) { 30 // TODO Auto-generated catch block 31 e.printStackTrace(); 32 } catch (IOException e) { 33 // TODO Auto-generated catch block 34 e.printStackTrace(); 35 } 36 System.out.println("复制完成"); 37 } 38 }
②当文件大小没有超过 int 时,可以把文件的大小设置为数组的大小。注意关闭流的顺序。
1 package copy; 2 3 import java.io.File; 4 import java.io.FileInputStream; 5 import java.io.FileNotFoundException; 6 import java.io.FileOutputStream; 7 import java.io.IOException; 8 import java.io.InputStream; 9 import java.io.OutputStream; 10 11 public class Test0 { 12 13 public static void main(String[] args) { 14 // TODO Auto-generated method stub 15 File from = new File("D:/东软实训/面试题目/Java面试宝典.doc"); 16 File to = new File("D:/"+from.getName()); 17 try { 18 /*读源文件*/ 19 InputStream is = new FileInputStream(from); 20 byte[] b = new byte[(int) from.length()]; 21 is.read(b); 22 is.close();//读完后,输入流此时就可以关闭了 23 /*写到目标文件*/ 24 OutputStream os = new FileOutputStream(to); 25 os.write(b); 26 os.close();//关闭输出流 27 System.out.println("复制完成"); 28 } catch (FileNotFoundException e) { 29 // TODO Auto-generated catch block 30 e.printStackTrace(); 31 } catch (IOException e) { 32 // TODO Auto-generated catch block 33 e.printStackTrace(); 34 } 35 } 36 }
若有错误之处,欢迎指正。谢谢!