定义一个方法
参数:
srcFile:被复制的文件
destFile:通过复制得到的新文件
public static void copyFile(File srcFile, File destFile) throws IOException{
if(!srcFile.exists()){
throw new IllegalArgumentException("文件:"+ srcFile +"不存在!");
} if(!srcFile.isFile()){
throw new IllegalArgumentException(srcFile +"不是文件!");
} 以上判断文件是否存在及是否为目录
FileInputStream fis = new FileInputStream(srcFile); //相当于复制文件 FileOutputStream fos = new FileOutputStream(destFile); //相当于粘贴文件
定义缓冲区(二选一):
1.批量读取方式:
byte[] buf = new byte[8*1024]; //定义一个作为缓冲的byte数组
2.单字节读取方式:
int c; //定义一个作为缓冲的int对象
读取并写入数据(二选一):
1.批量读取:
while((fis.read(buf, 0, buf.length)) != -1){
for (byte b : buf) {
fos.write(b); //将读到的字节逐个写入文件
}
fos.flush(); //刷新缓冲区,不刷新也没关系,但因为有缓冲区,所以最好加上
}2.单字节读取:
while((c = fis.read()) != -1){
fos.write(c); //将读到的字节逐个写入文件
fos.flush(); //刷新缓冲区,不刷新也没关系,因为没有缓冲区
}关闭流:
fis.close(); //关闭文件输入流 fos.close(); //关闭文件输出流 }
注意:
使用逐个字节读取方式,不带缓冲区。这种方式最慢。
使用批量字节读取方式。通过定义合理的作为缓冲的byte数组大小,可以达到与BufferxxxStream方法相同甚至高出的效率。
代码参考自:http://www.imooc.com/上的课程
本文出自 “个人笔记” 博客,请务必保留此出处http://mobileself.blog.51cto.com/4350932/1738730
用FileInputStream和FileOutputStream实现文件复制粘贴
原文:http://mobileself.blog.51cto.com/4350932/1738730