一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務(wù)器之家 - 編程語言 - JAVA教程 - 4種java復(fù)制文件的方式

4種java復(fù)制文件的方式

2019-12-31 14:41王爵 JAVA教程

本篇文章列舉了4種最受歡迎的java復(fù)制文件的方式,復(fù)制文件是一個重要的操作,需要的朋友可以參考下

盡管Java提供了一個可以處理文件的IO操作類,但是沒有一個復(fù)制文件的方法。復(fù)制文件是一個重要的操作,當(dāng)你的程序必須處理很多文件相關(guān)的時候。然而有幾種方法可以進(jìn)行Java文件復(fù)制操作,下面列舉出4中最受歡迎的方式。

1. 使用FileStreams復(fù)制

這是最經(jīng)典的方式將一個文件的內(nèi)容復(fù)制到另一個文件中。 使用FileInputStream讀取文件A的字節(jié),使用FileOutputStream寫入到文件B。 這是第一個方法的代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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();
  }
}

正如你所看到的我們執(zhí)行幾個讀和寫操作try的數(shù)據(jù),所以這應(yīng)該是一個低效率的,下一個方法我們將看到新的方式。

2. 使用FileChannel復(fù)制

Java NIO包括transferFrom方法,根據(jù)文檔應(yīng)該比文件流復(fù)制的速度更快。這是第二種方法的代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
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();
  }
}

3. 使用Commons IO復(fù)制

Apache Commons IO提供拷貝文件方法在其FileUtils類,可用于復(fù)制一個文件到另一個地方。它非常方便使用Apache Commons FileUtils類時,您已經(jīng)使用您的項(xiàng)目。基本上,這個類使用Java NIO FileChannel內(nèi)部。 這是第三種方法的代碼:

?
1
2
3
4
private static void copyFileUsingApacheCommonsIO(File source, File dest)
    throws IOException {
  FileUtils.copyFile(source, dest);
}

4. 使用Java7的Files類復(fù)制

如果你有一些經(jīng)驗(yàn)在Java 7中你可能會知道,可以使用復(fù)制方法的Files類文件,從一個文件復(fù)制到另一個文件。 這是第四個方法的代碼:

?
1
2
3
4
private static void copyFileUsingJava7Files(File source, File dest)
    throws IOException { 
    Files.copy(source.toPath(), dest.toPath());
}

5. 測試

現(xiàn)在看到這些方法中的哪一個是更高效的,我們會復(fù)制一個大文件使用每一個在一個簡單的程序。 從緩存來避免任何性能明顯我們將使用四個不同的源文件和四種不同的目標(biāo)文件。 讓我們看一下代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
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);
  }
 
}

輸出:

?
1
2
3
4
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

正如您可以看到的FileChannels拷貝大文件是最好的方法。如果你處理更大的文件,你會注意到一個更大的速度差。這是一個示例,該示例演示了Java中四種不同的方法可以復(fù)制一個文件。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: www.最色| 水多多www视频在线观看高清 | 成年视频在线播放 | 四虎最新紧急更新地址 | 亚洲2017久无码 | 小货SAO边洗澡边CAO你动漫 | 丝瓜香蕉视频 | 天天操天天爽天天射 | 日本人成年视频在线观看 | 天天草b | 国产啪精品视频网给免丝袜 | fc2免费人成在线 | 美女张开腿黄网站免费精品动漫 | 忘忧草高清 | 天仙tv微福视频 | 日韩v| 九九九九在线精品免费视频 | a黄色 | 色倩网站| 精品视频在线免费播放 | 亚洲国产在线综合018 | 日本大乳护士的引诱图片 | 91尤物在线视频 | 好吊日在线 | 高h巨肉play 高h短篇辣肉各种姿势bl | 成人私人影院在线版 | 国产精品免费精品自在线观看 | 免费日批视频 | 91精品国产91久久久久久 | 公妇仑乱在线观看 | 狠狠燥| 色漫在线观看 | 韩国日本在线观看 | 亚洲第一天堂网 | 精品一区二区三区在线视频观看 | 国产精品久久久久久爽爽爽 | 高清国产精品久久 | 国产另类视频一区二区三区 | 动漫美女强行被吸乳做羞羞事 | 污文啊好棒棒啊好了 | 亚洲成人国产 |