How to copy file from one location to another location?

后端 未结 6 965
攒了一身酷
攒了一身酷 2020-11-28 23:02

I want to copy a file from one location to another location in Java. What is the best way to do this?


Here is what I have so far:

import java.i         


        
6条回答
  •  心在旅途
    2020-11-28 23:07

    Using Stream

    private static void copyFileUsingStream(File source, File dest) throws IOException {
        InputStream is = null;
        OutputStream os = null;
        try {
            is = new FileInputStream(source);
            os = new FileOutputStream(dest);
            byte[] buffer = new byte[1024];
            int length;
            while ((length = is.read(buffer)) > 0) {
                os.write(buffer, 0, length);
            }
        } finally {
            is.close();
            os.close();
        }
    }
    

    Using Channel

    private static void copyFileUsingChannel(File source, File dest) throws IOException {
        FileChannel sourceChannel = null;
        FileChannel destChannel = null;
        try {
            sourceChannel = new FileInputStream(source).getChannel();
            destChannel = new FileOutputStream(dest).getChannel();
            destChannel.transferFrom(sourceChannel, 0, sourceChannel.size());
           }finally{
               sourceChannel.close();
               destChannel.close();
           }
    }
    

    Using Apache Commons IO lib:

    private static void copyFileUsingApacheCommonsIO(File source, File dest) throws IOException {
        FileUtils.copyFile(source, dest);
    }
    

    Using Java SE 7 Files class:

    private static void copyFileUsingJava7Files(File source, File dest) throws IOException {
        Files.copy(source.toPath(), dest.toPath());
    }
    

    Or try Googles Guava :

    https://github.com/google/guava

    docs: https://guava.dev/releases/snapshot-jre/api/docs/com/google/common/io/Files.html

    Compare time:

        File source = new File("/Users/sidikov/tmp/source.avi");
        File dest = new File("/Users/sidikov/tmp/dest.avi");
    
    
        //copy file conventional way using Stream
        long start = System.nanoTime();
        copyFileUsingStream(source, dest);
        System.out.println("Time taken by Stream Copy = "+(System.nanoTime()-start));
         
        //copy files using java.nio FileChannel
        source = new File("/Users/sidikov/tmp/sourceChannel.avi");
        dest = new File("/Users/sidikov/tmp/destChannel.avi");
        start = System.nanoTime();
        copyFileUsingChannel(source, dest);
        System.out.println("Time taken by Channel Copy = "+(System.nanoTime()-start));
         
        //copy files using apache commons io
        source = new File("/Users/sidikov/tmp/sourceApache.avi");
        dest = new File("/Users/sidikov/tmp/destApache.avi");
        start = System.nanoTime();
        copyFileUsingApacheCommonsIO(source, dest);
        System.out.println("Time taken by Apache Commons IO Copy = "+(System.nanoTime()-start));
         
        //using Java 7 Files class
        source = new File("/Users/sidikov/tmp/sourceJava7.avi");
        dest = new File("/Users/sidikov/tmp/destJava7.avi");
        start = System.nanoTime();
        copyFileUsingJava7Files(source, dest);
        System.out.println("Time taken by Java7 Files Copy = "+(System.nanoTime()-start));
    

提交回复
热议问题