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

服務(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í)有所幫助。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 98pao强力打造高清免费 | 四虎影院在线免费观看视频 | 人皮高跟鞋在线观看 | 国产精品美女福利视频免费专区 | 九九九九九九伊人 | 四虎网址| 好逼天天有 | 丝袜足液精子免费视频 | 国产小视频在线 | 日本视频免费在线观看 | 久久久久久久久a免费 | 日本精品一卡二卡≡卡四卡 | 3344在线看片 | 四虎影院地址 | 国产精品一区二区国产 | 草溜短视频| 男人影院在线观看 | 男人操女人动图 | 精品国产一二三区在线影院 | 日韩av线观看| 高清在线观看免费 | 精品久久久久久无码人妻国产馆 | 日韩精品欧美高清区 | 欧美伊香蕉久久综合类网站 | 男gaygays免费网站多人 | 国产麻豆网 | 欧美激情精品久久久久久不卡 | 日本漫画被黄漫免费动 | 第一次做m被调教经历 | 高清在线看 | 涩涩屋在线观看 | 国内揄拍国内精品久久 | 青青草精品在线观看 | 99精品在免费线视频 | 99美国热| 国模孕妇季玥337p人体 | 男人晚上看的 | 免费精品国产在线观看 | 亚洲va欧美va天堂v国产综合 | 亚洲免费小视频 | 国产亚洲精品高清在线 |