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

專(zhuān)注Java教育14年 全國(guó)咨詢(xún)/投訴熱線:400-8080-105
動(dòng)力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁(yè) 學(xué)習(xí)攻略 Java學(xué)習(xí) 使用Java復(fù)制文件的方法

使用Java復(fù)制文件的方法

更新時(shí)間:2022-06-10 11:10:59 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽1950次

Java教程中,大家學(xué)到了很多關(guān)于Java的課程,接下來(lái)動(dòng)力節(jié)點(diǎn)小編將介紹在 Java 中復(fù)制文件的常用方法。

首先,我們將使用標(biāo)準(zhǔn)IO和NIO.2 API,以及兩個(gè)外部庫(kù):commons-io和guava。

1. IO API(JDK7之前)

首先,要使用 java.io API復(fù)制文件,我們需要打開(kāi)一個(gè)流,遍歷內(nèi)容并將其寫(xiě)入另一個(gè)流:

@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())));
}

實(shí)現(xiàn)這樣的基本功能需要做很多工作。

對(duì)我們來(lái)說(shuō)幸運(yùn)的是,Java 改進(jìn)了它的核心 API,并且我們有了使用NIO.2 API復(fù)制文件的更簡(jiǎn)單的方法。

2. NIO.2 API (JDK7)

使用NIO.2可以顯著提高文件復(fù)制性能,因?yàn)镹IO.2使用較低級(jí)別的系統(tǒng)入口點(diǎn)。

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

copy()方法使我們能夠指定表示復(fù)制選項(xiàng)的可選參數(shù)。默認(rèn)情況下,復(fù)制文件和目錄不會(huì)覆蓋現(xiàn)有文件和目錄,也不會(huì)復(fù)制文件屬性。

可以使用以下復(fù)制選項(xiàng)更改此行為:

REPLACE_EXISTING –如果文件存在則替換它

COPY_ATTRIBUTES –將元數(shù)據(jù)復(fù)制到新文件

NOFOLLOW_LINKS –不應(yīng)遵循符號(hào)鏈接

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

讓我們看一個(gè)使用帶有兩個(gè)Path參數(shù)的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)));
}

請(qǐng)注意,目錄副本很淺,這意味著目錄中的文件和子目錄不會(huì)被復(fù)制。

3. Apache Commons IO

使用 Java 復(fù)制文件的另一種常用方法是使用commons-io庫(kù)。

首先,我們需要添加依賴(lài):

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

最新版本可以從Maven Central下載。

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

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

@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())));
}

4.Guava 庫(kù)

最后,我們來(lái)看看 Google 的 Guava 庫(kù)。

同樣,如果我們想使用 Guava ,我們需要包含依賴(lài)項(xiàng):

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

最新版本可以在 Maven Central上找到。

這是 Guava 復(fù)制文件的方式:

@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())));
}

如果想了解更多相關(guān)知識(shí),可以關(guān)注一下動(dòng)力節(jié)點(diǎn)的Guava教程,里面有更豐富的知識(shí)等著大家去學(xué)習(xí),希望對(duì)大家能夠有所幫助。

提交申請(qǐng)后,顧問(wèn)老師會(huì)電話(huà)與您溝通安排學(xué)習(xí)

免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 亚洲综合网在线 | 国产99re在线观看只有精品 | 亚洲天天做夜夜做天天欢 | 成人性生活免费看 | 国产这里有精品 | 亚洲久草视频 | 97色伦图片97色伦图影院久久 | 99在线视频播放 | 奇米影视4444| 国产亚洲欧洲国产综合一区 | 四虎精品久久久久影院 | 久久视频精品 | 亚洲精品欧美精品一区二区 | 四虎国产精品免费五月天 | 一级片aaaaaa| 欧美一级毛片视频 | 久久99国产精品免费观看 | 国产成人精品三区 | 色播99| 成人影院在线观看视频 | 中文字幕三级在线不卡 | 免费一级真人毛片 | 日韩精品一区二区三区视频 | 特黄特色一级aa毛片免费观看 | 曰批免费视频播放在线看片 | 狠狠色婷婷狠狠狠亚洲综合 | 久热精品视频在线观看 | 在线观看精品91老司机 | 欧美123| 伊人精品在线视频 | 精品欧美一区手机在线观看 | 欧美成人性色生活片天天看 | 国产99欧美精品久久精品久久 | 人人狠狠综合久久亚洲婷婷 | 国产精品永久免费自在线观看 | 天天爱天天色天天干 | 成年人网站免费 | 日本a∨在线观看 | 国产在线不卡视频 | 国产成人精品亚洲2020 | 久操福利视频 |