一:缓冲输入输出流(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
|
|