精华内容
下载资源
问答
  • Java实现文件复制

    千次阅读 2016-04-18 18:00:26
    Java复制文件 下面介绍两种方法 一种是使用传统的缓冲输入输出流(InputStream、OutputStream)来实现 另外一种使用文件通道(FileChannel)来实现,效率上FileChannel会比InputStream快 而且文件越大对比越明显 ...

    Java复制文件 下面介绍两种方法

    一种是使用传统的缓冲输入输出流(InputStream、OutputStream)来实现

    另外一种使用文件通道(FileChannel)来实现,效率上FileChannel会比InputStream快

    而且文件越大对比越明显

    一、缓冲输入输出流(InputStream、OutputStream)

    /**
     * 缓冲输入输出流方式复制文件
     * @param srcFileName 待复制的文件名
     * @param descFileName  目标文件名
     * @param overlay  如果目标文件存在,是否覆盖
     * @return 如果复制成功返回true,否则返回false
     */
    public static boolean copyFile(String srcFileName, String destFileName,boolean overlay) {
        File srcFile = new File(srcFileName);
    
        // 判断源文件是否存在
        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);
        if (destFile.exists()) {
            // 如果目标文件存在并允许覆盖
            if (overlay) {
                // 删除已经存在的目标文件
                new File(destFileName).delete();
            }
        } else {
            // 如果目标文件所在目录不存在,则创建目录
            if (!destFile.getParentFile().exists()) {
                // 目标文件所在目录不存在
                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];
    
            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();
            }
        }
    }

    二、文件通道(FileChannel)

    /**
     * 使用文件通道的方式复制文件
     * @param srcDirName 待复制的文件名
     * @param destDirName 目标文件名
     */
    public static void fileChannelCopy(String srcDirName, String destDirName) {
        FileInputStream fi = null;
        FileOutputStream fo = null;
        FileChannel in = null;
        FileChannel out = null;
    
        try {
            fi = new FileInputStream(new File(srcDirName));
            fo = new FileOutputStream(new File(destDirName));
            in = fi.getChannel(); // 得到对应的文件通道
            out = fo.getChannel(); // 得到对应的文件通道
            in.transferTo(0, in.size(), out); // 连接两个通道,并且从in通道读取,然后写入out通道
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                fi.close();
                in.close();
                fo.close();
                out.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    测试代码

    public static void main(String[] args) {
        String srcDirName = "D:/jdk-6u2-windows-i586-p.exe";
        String destDirName = "D:/jdk-6u2-windows-i586-p-bak.exe";
        long start;
        long end;
    
        start = System.currentTimeMillis();
        CopyFile.copyFile(srcDirName, destDirName, true);
        end = System.currentTimeMillis();
        System.out.println("缓冲输入输出流方式复制文件 用时:" + (end - start) + " ms");
    
        start = System.currentTimeMillis();
        CopyFile.fileChannelCopy(srcDirName, destDirName);
        end = System.currentTimeMillis();
        System.out.println("使用文件通道的方式复制文件 用时:" + (end - start) + " ms");
    }

    输出结果

    这里写图片描述

    所测试文件大小为65M,由此可见FileChannel复制文件的速度比FileInputStream快很多。

    而且FileChannel是多并发线程安全的。


    作者:itmyhome

    展开全文
  • java 实现文件复制的两种方式

    万次阅读 2011-07-03 14:45:27
    java 实现文件复制的两种方式 文件复制首先我们要考虑的是用字符流还是文件流操作呢? 若我们考虑的仅仅是文本之类的复制,字符流要好些。但是不可能总是文本文件吧,有可能是声音,图像,视频等等,所以使用字节流...
     
      文件复制首先我们要考虑的是用字符流还是文件流操作呢?
        若我们考虑的仅仅是文本之类的复制,字符流要好些。但是不可能总是文本文件吧,有可能是声音,图像,视频等等,所以使用字节流操作比较好。
        复制的两种方式
          1.将源文件中的内容全部读取到内存中,并一次性写入到目标文件
          2.不将源文件中的内容全部读取到内存中来,而是采取边读边写的方式
    下面就是采用这两种方法对比
    Java代码
    1.  package zzs.file.demo;  
    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 FileCopy {  
    12.     private File inputFile;  
    13.     private File outputFile;  
    14.     private InputStream inputStream;  
    15.     private OutputStream outputStream;  
    16.     public FileCopy(String inputPath,String outputPath) throws FileNotFoundException{  
    17.         inputFile=new File(inputPath);  
    18.         outputFile=new File(outputPath);  
    19.         inputStream=new FileInputStream(inputFile);  
    20.         outputStream=new FileOutputStream(outputFile);  
    21.           
    22.     }  
    23.     //一次性把数据全部读取到内存中来,再一次性写入  
    24.     public void copy1() throws IOException{  
    25.         byte b[]=new byte[(int)inputFile.length()];  
    26.         inputStream.read(b);       //一次性读入  
    27.         outputStream.write(b);   //一次性写入  
    28. //      inputStream.close();  
    29. //      outputStream.close();  
    30.     }  
    31.     //边读边写  
    32.     public void copy2() throws IOException{  
    33.         int temp=0;  
    34.         while((temp=inputStream.read())!=-1){  
    35.             outputStream.write(temp);  
    36.         }  
    37.         inputStream.close();  
    38.         outputStream.close();  
    39.     }  
    40.       
    41.     public File getInputFile() {  
    42.         return inputFile;  
    43.     }  
    44.     public void setInputFile(File inputFile) {  
    45.         this.inputFile = inputFile;  
    46.     }  
    47.     public File getOutputFile() {  
    48.         return outputFile;  
    49.     }  
    50.     public void setOutputFile(File outputFile) {  
    51.         this.outputFile = outputFile;  
    52.     }  
    53.     public static void main(String[] args) throws IOException{  
    54.         String inputPath="e:"+File.separator+"Xfire.rar";  
    55.         String outputPath="f:"+File.separator+inputPath.substring(inputPath.indexOf(File.separator));  
    56.         FileCopy fileCopy=new FileCopy(inputPath, outputPath);  
    57.         long start1=System.currentTimeMillis();  
    58.         fileCopy.copy1();  
    59.         long end1=System.currentTimeMillis();  
    60.         System.out.println("一次性全部读入内存复制文件大小为"+fileCopy.getInputFile().length()+"位花费时间为:"+(end1-start1)+"ms");  
    61.           
    62.           
    63.         fileCopy.getOutputFile().delete();  
    64.         long start2=System.currentTimeMillis();  
    65.         fileCopy.copy2();  
    66.         long end2=System.currentTimeMillis();  
    67.         System.out.println("边读边写复制文件大小为"+fileCopy.getInputFile().length()+"位花费时间为:"+(end2-start2)+"ms");  
    68.     }  
    69.   
    70. }  

       经测试发现,对于读取文件的大小小于自身机器的内存时,采取方式1要比方式二快很多,但是若读取的文件大于自身内存则方式二好些。不过在这种情况下有更好的方式就是采取缓冲机制,读取一块,写入一块。结合了一和二的优点。
    展开全文
  • 使用java实现文件复制操作

    千次阅读 2018-11-01 18:55:16
    文件复制(FileReader,FileWriter) 将文件1复制到指定位置,并且修改文件名,复制过程中只用缓冲区(BufferedReader,BufferedWriter),提高复制的效率。 代码如下: import java.io.*; public class Demo { ...

    文件复制(FileReader,FileWriter)

    将文件1复制到指定位置,并且修改文件名,复制过程中只用缓冲区(BufferedReader,BufferedWriter),提高复制的效率。

    代码如下:

    import java.io.*;
    public class Demo {
        public static void main(String args[]) throws IOException {
            Demo.copyFile("a.txt", "b.txt");
            System.out.println("文件复制完毕");
        }
        public static void copyFile(String str1, String str2) throws IOException {
            FileReader fr = new FileReader(str1);
            //设置读缓冲区
            BufferedReader br = new BufferedReader(fr);
            FileWriter fw = new FileWriter(str2);
            //设置写缓冲区
            BufferedWriter bw = new BufferedWriter(fw);
            String s;
            //当读入的内容不为空时,使用循环一直读入
            while ((s = br.readLine()) != null) {
                bw.write(s);
                //新建一行
                bw.newLine();
                //使用缓冲区必须刷出
                bw.flush();
            }
            //操作结束后,关闭流,先打开的后关闭,后打开的先关闭
            bw.close();
            br.close();
        }
    }
    
    
    
    展开全文
  • java实现文件复制功能

    千次阅读 2014-01-03 15:53:19
    简单的文件复制程序,当然只是复制过程中的一部分,仔细分析还有很多功能,比如判断磁盘是否有足够空间,效率等问题,这些问题后面会牵涉到 public void copyFolder(String oldPath,String newPath){ File nf ...

    简单的文件复制程序,当然只是复制过程中的一部分,仔细分析还有很多功能,比如判断磁盘是否有足够空间,效率等问题,这些问题后面会牵涉到


    public void copyFolder(String oldPath,String newPath){

    File nf = new File(newPath);
    if(!nf.exists()){//判断文件是否存在,不存在新建
    nf.mkdirs();
    }
    File of = new File(oldPath);
    String[] file = of.list();
    File temp = null;
    for(int i=0;i<file.length;i++){
    if(oldPath.endsWith(File.separator)){
    temp = new File(oldPath+file[i]);
    }else{
    temp = new File(oldPath+File.separator+file[i]);
    }

    if(temp.isFile()){
    try {
    FileInputStream fis = new FileInputStream(temp);
    FileOutputStream fos = new FileOutputStream(newPath+"/"+temp.getName().toString());
    byte[] by = new byte[1024*2];//一次读取宽度
    int len = 0;
    while((len=fis.read(by))!=-1){
    fos.write(by,0,len);
    }
    fos.flush();
    fos.close();
    fis.close();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    if(temp.isDirectory()){
    copyFolder(oldPath+"/"+file[i], newPath+"/"+file[i]);
    }
    }
    }
    展开全文
  • Java实现文件复制(以图片为例)

    千次阅读 2019-07-18 23:38:02
    Java实现文件复制(以图片为例) 1、代码 import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; /** * Java实现文件复制(以图片为例) *...
  • java文件处理(3)——实现文件复制和文件移动

    万次阅读 多人点赞 2018-10-07 17:31:16
    通过二进制流的操作方式把程序调整为可以实现对任何类型文件进行文件复制(而不是调用windows命令行的内部命令copy)。 通过二进制流的操作方式把程序调整为可以实现对任何类型文件进行文件移动(而不是调用windows...
  • JAVA实现图像文件复制

    千次阅读 2013-04-05 14:33:25
    java实现图像文件复制功能,运用IO中的FileInputStream等类实现import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class ImageCopy { public static void ...
  • java实现文件复制,移动

    万次阅读 2012-08-11 15:46:36
    java实现文件复制,移动 package com.file; import java.io.File;//引入类 import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io....
  • java io实现文件复制

    千次阅读 2018-02-06 18:05:27
    import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; im....
  • Java实现文件的拷贝复制

    万次阅读 2017-10-18 19:41:12
    import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream;public class CopyFileDemo{ public static void main(String[] args){ //将F盘下面的file.txt文件拷贝到桌面 String
  • Java实现简单的文件复制功能

    千次阅读 2019-05-04 13:39:29
    1.文件复制: 从一个输入流中读取数据,然后通过输出流写入目标位置 一边读,一边写 2.代码: package com.lemon; import java.io.File; import java.io.FileInputStream; import java.io....
  • Java实现复制文件或者文件夹

    千次阅读 2019-12-05 14:33:45
    拷贝一个文件的算法比较简单,当然,可以对它进行优化,比如使用缓冲流,提高读写数据的... * 实现文件的拷贝 */ public class CopyFile { /** * 复制文件夹 * * @param resource 源路径 * @param target ...
  • Java多线程实现复制文件

    千次阅读 2018-09-24 15:55:33
    * 实现文件复制功能 * 多线程实现文件从一个目录复制到另一个目录 * @param sourceFile:给定源文件路径名 * @param desPath:复制点文件路径 * @return */ 代码实现如下: package com.tulun.thread; import ...
  • java使用BufferedInputStream和BufferedOutputStream实现文件复制 import java.io.*; public class IODemo { public static void main(String[] args) { String src = ""; //源文件路径 String dest = ""; //目.....
  • 使用Java语言如何实现快速文件复制
  • 此程序可以将指定的文件夹及其子目录复制到指定文件下去。 可玩性较强! import java.io.FileOutputStream; import java.io.FileInputStream; import java.util.Scanner; import java.io.*; public class Copy{ ...
  • Java 文件复制

    千次阅读 2019-05-08 21:01:47
    文件复制可能在电脑上直接Ctrl+C和Ctrl+V就可以把文件和文件里面的信息都复制到选择复制的文件夹,这个过程是很简单的;而在java里面通过代码去实现就不是很简单了,下面我就把我在java实现复制的过程步骤讲一下:...
  • java实现文件复制功能

    千次阅读 2016-06-16 19:10:00
    通过选择合适的下列流进行文件的复制 ...文件复制的逻辑:循环的读取旧文件的数据,循环的写出到新文件里。  1)图片的复制,把用户输入的路径代表的图片复制到同目录,文件名改为原文件名加_new。 例如
  • java实现文件进行复制

    千次阅读 2018-09-26 11:06:39
     通过二进制流的操作方式把程序调整为可以实现对任何类型文件进行文件复制(而不是调用windows命令行的内部命令copy)。 思路: 先在需要复制到的文件夹下用file.createNewFile()新建文件,然后读出要复制的文件...
  • 版权声明:以下代码均由小任一人码成,转载请注明出处。 源码 import java.io.File; import java.io.FileInputStream;...//file读和写实现复制文件 public static void main(String[] args) throws E...
  • Java实现文件复制功能

    千次阅读 2018-09-08 18:30:00
    * 编写一个java程序实现文件复制功能, * 要求将e:/io/copysrc.doc中的内容复制到 * f:/io/copydes.doc中。 * */ * import java.io.File; import java.io.FileInputStream; import java.io....
  • java之通过FileChannel实现文件复制

    千次阅读 2018-06-10 22:22:59
    1、FileChanel介绍Java NIO FileChannel是连接文件的通道,从文件中读取数据和将数据写入文件Java NIO FileChannel类是NIO用于替代使用标准Java IO API读取文件的方法。FileInputStream的getChannel方法获取的文件...
  • Java实现简单文本文件复制

    千次阅读 2013-04-05 14:27:54
    import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class TextFileCopy { public static void main(String[] args) { FileReader reader = null; FileWriter writer

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 354,407
精华内容 141,762
关键字:

java实现文件复制

java 订阅