溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java中文件復制的方式有哪些

發布時間:2022-02-28 11:30:36 來源:億速云 閱讀:193 作者:小新 欄目:web開發

這篇文章主要介紹了java中文件復制的方式有哪些,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

java中文件復制的4種方式

1. 使用FileStreams復制

比較經典的一個代碼,使用FileInputStream讀取文件A的字節,使用FileOutputStream寫入到文件B。

public static void copy(String source, String dest, int bufferSize) {
    InputStream in = null;
    OutputStream out = null;
    try {
        in = new FileInputStream(new File(source));
        out = new FileOutputStream(new File(dest));

        byte[] buffer = new byte[bufferSize];
        int len;

        while ((len = in.read(buffer)) > 0) {
            out.write(buffer, 0, len);
        }
    } catch (Exception e) {
        Log.w(TAG + ":copy", "error occur while copy", e);
    } finally {
        safelyClose(TAG + ":copy", in);
        safelyClose(TAG + ":copy", out);
    }
}   
2.

2、使用FileChannel

Java NIO包括transferFrom方法,根據文檔應該比文件流復制的速度更快。

public static void copyNio(String source, String dest) {
    FileChannel input = null;
    FileChannel output = null;

    try {
        input = new FileInputStream(new File(from)).getChannel();
        output = new FileOutputStream(new File(to)).getChannel();
        output.transferFrom(input, 0, input.size());
    } catch (Exception e) {
        Log.w(TAG + "copyNio", "error occur while copy", e);
    } finally {
        safelyClose(TAG + "copyNio", input);
        safelyClose(TAG + "copyNio", output);
    }
}

3、 使用Apache Commons IO復制
Appache Commons IO 提供了一個FileUtils.copyFile(File from, File to)方法用于文件復制,如果項目里使用到了這個類庫,使用這個方法是個不錯的選擇。
它的內部也是使用Java NIO的FileChannel實現的。
commons-io的路徑:http://commons.apache.org/proper/commons-io/javadocs/api-release/index.html。里面還有很多實用的方法,如拷貝目錄、拷貝指定格式文件等。
private static void  copyFileByApacheCommonsIO(File source, File dest) throws IOException {
    FileUtils.copyFile(source, dest);
}

4、使用Java7的Files類復制

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

我沒有親測,找了下網友的測試程序和輸出,性能數據供大家參考

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import java.nio.channels.FileChannel;

import java.nio.file.Files;

import org.apache.commons.io.FileUtils;

public class CopyFilesExample {   public static void main(String[] args) throws InterruptedException,

      IOException {

    File source = new File("C:\\Users\\nikos7\\Desktop\\files\\sourcefile1.txt");

    File dest = new File("C:\\Users\\nikos7\\Desktop\\files\\destfile1.txt");


    // copy file using FileStreams

    long start = System.nanoTime();

    long end;

    copyFileUsingFileStreams(source, dest);

    System.out.println("Time taken by FileStreams Copy = "

        + (System.nanoTime() - start));       // copy files using java.nio.FileChannel

    source = new File("C:\\Users\\nikos7\\Desktop\\files\\sourcefile2.txt");

    dest = new File("C:\\Users\\nikos7\\Desktop\\files\\destfile2.txt");

    start = System.nanoTime();

    copyFileUsingFileChannels(source, dest);

    end = System.nanoTime();

    System.out.println("Time taken by FileChannels Copy = " + (end - start));     // copy file using Java 7 Files class

    source = new File("C:\\Users\\nikos7\\Desktop\\files\\sourcefile3.txt");

    dest = new File("C:\\Users\\nikos7\\Desktop\\files\\destfile3.txt");

    start = System.nanoTime();

    copyFileUsingJava7Files(source, dest);

    end = System.nanoTime();

    System.out.println("Time taken by Java7 Files Copy = " + (end - start));

    // copy files using apache commons io

    source = new File("C:\\Users\\nikos7\\Desktop\\files\\sourcefile4.txt");

    dest = new File("C:\\Users\\nikos7\\Desktop\\files\\destfile4.txt");

    start = System.nanoTime();

    copyFileUsingApacheCommonsIO(source, dest);

    end = System.nanoTime();

    System.out.println("Time taken by Apache Commons IO Copy = "

        + (end - start));   }

  private static void copyFileUsingFileStreams(File source, File dest)

      throws IOException {

    InputStream input = null;

    OutputStream output = null;

    try {

      input = new FileInputStream(source);

      output = new FileOutputStream(dest);

      byte[] buf = new byte[1024];

      int bytesRead;

      while ((bytesRead = input.read(buf)) > 0) {

        output.write(buf, 0, bytesRead);

      }

    } finally {

      input.close();

      output.close();

    }

  }

  private static void copyFileUsingFileChannels(File source, File dest)

      throws IOException {

    FileChannel inputChannel = null;

    FileChannel outputChannel = null;

    try {

      inputChannel = new FileInputStream(source).getChannel();

      outputChannel = new FileOutputStream(dest).getChannel();

      outputChannel.transferFrom(inputChannel, 0, inputChannel.size());

    } finally {

      inputChannel.close();

      outputChannel.close();

    }

  }

  private static void copyFileUsingJava7Files(File source, File dest)

      throws IOException {

    Files.copy(source.toPath(), dest.toPath());

  }

  private static void copyFileUsingApacheCommonsIO(File source, File dest)

      throws IOException {

    FileUtils.copyFile(source, dest);

  } }

輸出:

Time taken by FileStreams Copy = 127572360

Time taken by FileChannels Copy = 10449963

Time taken by Java7 Files Copy = 10808333

Time taken by Apache Commons IO Copy = 17971677

感謝你能夠認真閱讀完這篇文章,希望小編分享的“java中文件復制的方式有哪些”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女