大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 Java學習 Java文件拷貝的方法

Java文件拷貝的方法

更新時間:2022-11-22 09:38:38 來源:動力節點 瀏覽1837次

在本文中,我們將介紹在 Java 中復制文件的常用方法。

首先,我們將使用標準IO和NIO.2 API,以及兩個外部庫:commons-io和guava。

IO API(JDK7之前)

首先,要使用 java.io API復制文件,我們需要打開一個流,遍歷內容并將其寫出到另一個流:

@Test
public void givenIoAPI_whenCopied_thenCopyExistsWithSameContents() 
  throws IOException { 
    File copied = new File("src/test/resources/copiedWithIo.txt");
    try (
      InputStream in = new BufferedInputStream(
        new FileInputStream(original));
      OutputStream out = new BufferedOutputStream(
        new FileOutputStream(copied))) { 
        byte[] buffer = new byte[1024];
        int lengthRead;
        while ((lengthRead = in.read(buffer)) > 0) {
            out.write(buffer, 0, lengthRead);
            out.flush();
        }
    } 
    assertThat(copied).exists();
    assertThat(Files.readAllLines(original.toPath())
      .equals(Files.readAllLines(copied.toPath())));
}

實現這樣的基本功能需要做很多工作。

對我們來說幸運的是,Java 改進了它的核心 API,我們有了使用NIO.2 API復制文件的更簡單方法。

NIO.2 API (JDK7)

使用NIO.2可以顯著提高文件復制性能,因為NIO.2使用較低級別的系統入口點。

讓我們仔細看看 Files. copy()方法有效。

copy()方法使我們能夠指定表示復制選項的可選參數。默認情況下,復制文件和目錄不會覆蓋現有的,也不會復制文件屬性。

可以使用以下復制選項更改此行為:

REPLACE_EXISTING –替換文件(如果存在)

COPY_ATTRIBUTES –將元數據復制到新文件

NOFOLLOW_LINKS –不應跟隨符號鏈接

NIO.2 Files類提供了一組重載的copy ()方法,用于在文件系統中復制文件和目錄。

讓我們看一個使用帶有兩個Path參數的copy()的例子:

@Test
public void givenNIO2_whenCopied_thenCopyExistsWithSameContents() 
  throws IOException { 
    Path copied = Paths.get("src/test/resources/copiedWithNio.txt");
    Path originalPath = original.toPath();
    Files.copy(originalPath, copied, StandardCopyOption.REPLACE_EXISTING); 
    assertThat(copied).exists();
    assertThat(Files.readAllLines(originalPath)
      .equals(Files.readAllLines(copied)));
}

請注意,目錄副本是淺表的,這意味著目錄中的文件和子目錄不會被復制。

阿帕奇共享IO

使用 Java 復制文件的另一種常見方法是使用commons-io庫。

首先,我們需要添加依賴:

<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.11.0</version>
</dependency>

然后,要復制文件,我們只需要使用 FileUtils 類中定義的copyFile ()方法。該方法采用源文件和目標文件。

讓我們看一下使用copyFile()方法的 JUnit 測試:

@Test
public void givenCommonsIoAPI_whenCopied_thenCopyExistsWithSameContents() 
  throws IOException {    
    File copied = new File(
      "src/test/resources/copiedWithApacheCommons.txt");
    FileUtils.copyFile(original, copied);    
    assertThat(copied).exists();
    assertThat(Files.readAllLines(original.toPath())
      .equals(Files.readAllLines(copied.toPath())));
}

Guava 庫

最后,我們將看一下 Google 的 Guava 庫。

同樣,如果我們想使用 Guava ,我們需要包含依賴項:

<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>31.0.1-jre</version>
</dependency>

這是 Guava 復制文件的方式:

@Test
public void givenGuava_whenCopied_thenCopyExistsWithSameContents() 
  throws IOException { 
    File copied = new File("src/test/resources/copiedWithGuava.txt");
    com.google.common.io.Files.copy(original, copied); 
    assertThat(copied).exists();
    assertThat(Files.readAllLines(original.toPath())
      .equals(Files.readAllLines(copied.toPath())));
}

 

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 久久久久久色 | 国产一区二区三区四区在线观看 | 亚洲图区欧美 | 亚洲女人逼 | 久久96精品国产 | 97在线观看免费版 | 亚洲国产成人久久综合一区77 | 99精品国内不卡在线观看 | 国产欧美一区二区三区免费 | 伊人精品在线 | 青青青国产精品一区二区 | 四虎免费播放观看在线视频 | 国产97在线 | 亚洲 | 日本久久精品免视看国产成人 | 九九热播视频 | 国产一区二区在线 |播放 | 国产亚洲第一伦理第一区 | 久久久影院亚洲精品 | 四虎影视永久免费 | 国产伦理精品 | 亚洲色五月 | 久久成人亚洲 | 天天摸夜夜摸夜夜狠狠摸 | 日日碰日日摸日日澡视频播放 | 久久成人18 | 涩色在线| 国产精品一区二区三区免费视频 | 久草最新网址 | 伦理一区 | 久久爱com | 不卡精品国产_亚洲人成在线 | 亚洲国产成人精品女人久久久 | 综合在线视频 | 奇米影视久久777中文字幕 | 抱着cao才爽免费观看 | 松永纱奈在线观看 | 五月天婷婷视频 | 久久精品国产色蜜蜜麻豆 | 成人嫩草研究院网站进 | 国产香蕉98碰碰久久人人 | 国产99在线 | 亚洲 |