黑马程序员技术交流社区
标题:
Java_IO_两种文件复制方式比较(上)
[打印本页]
作者:
15732622419
时间:
2016-7-19 22:07
标题:
Java_IO_两种文件复制方式比较(上)
一:缓冲输入输出流(InputStream、OutputStream)
[java]
view plain
copy
print
?
/*
*缓冲输入输出流方式复制文件
*/
public static boolean copyFile(String srcFileName,String destFileName,boolean overlay){
File srcFile = new File(srcFileName); //根据一个路径得到File对象
//判断源文件是否存在
if(!srcFile.exists()){
try{
throw new Exception("源文件:"+srcFileName+"不存在!");
}catch(Exception e){
e.printStackTrace();//将异常内容存到日志文件中
}
return false;
}else if(!srcFile.isFile()){//判断是不是一个文件
try {
throw new Exception("复制文件失败,源文件:"+srcFileName+"不是一个文件!");
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
//判断目标文件是否存在
File destFile = new File(destFileName);//目标文件对象destFile
if(destFile.exists()){
//如果目标文件存在并允许覆盖
if(overlay){
//删除已经存在的目标文件
new File(destFileName).delete();
}
}else{
//如果目标文件所在目录不存在,则创建 目录
if(!destFile.getParentFile().exists()){
//目标文件所在目录不存在
//mkdirs():创建此抽象路径名指定的目录,包括所有必需但不存在的父目录
if(!destFile.getParentFile().mkdirs()){
//复制文件失败:创建目标文件所在目录失败
return false;
}
}
}
//复制文件
int byteread = 0;//读取的字节数
InputStream in = null;
OutputStream out = null;
try {
in = new FileInputStream(srcFile);
out = new FileOutputStream(destFile);
byte[] buffer = new byte[1024];
/*
* 方法说明:
* ①:将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此输出流。
* write(byte[] b, int off, int len)
* b - 数据
* off - 数据中的起始偏移量。
* len - 要写入的字节数。
* ②:in.read(buffer))!=-1,是从流buffer中读取一个字节,当流结束的时候read返回-1
*/
while((byteread = in.read(buffer))!=-1){
out.write(buffer, 0, byteread);
}
return true;
} catch (FileNotFoundException e) {
return false;
} catch (IOException e) {
return false;
}finally{
try {
if(out!=null){
out.close();
}
if(in!=null){
in.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}</span>
运行结果:
缓冲输入输出流方式复制文件,用时:499ms
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2