В этой статье показаны четыре способа копирования файла на Java.
Файлы.копировать
(NIO)- Общий доступ Apache IO
- Гуава
- Обычная Ява
В Java 7+ NIO Files.copy является самым простым способом копирования файла, потому что это встроенный API. До Java 7, Apache Commons ввод-вывод До Java 7, Apache Commons ввод-вывод
является предпочтительным решением, потому что устаревший ввод-вывод
java.io . *
1. *||не имеет API для копирования. (НИО)
1.1 Этот фрагмент кода использует NIO для копирования файла. По умолчанию, если целевой файл существует, копирование завершается ошибкой и вызывает Исключение FileAlreadyExistsException
.
Path fromFile = Paths.get(from); Path toFile = Paths.get(to); Files.copy(fromFile, toFile);
1.2 Параметр Files.copy
принимает аргумент varargs:
Стандартный вариант копирования. ЗАМЕНА_СУЩЕСТВУЮЩЕГО
– Если целевой файл завершит работу, замените его.Стандартный вариант копирования. АТРИБУТЫ COPY_ATTRIBUTES
– Копирует атрибуты файла в целевой файл.
import java.nio.file.StandardCopyOption; // if target or destination file exists, replace it. Files.copy(fromFile, toFile, StandardCopyOption.REPLACE_EXISTING); // multiple StandardCopyOption CopyOption[] options = { StandardCopyOption.REPLACE_EXISTING, StandardCopyOption.COPY_ATTRIBUTES, LinkOption.NOFOLLOW_LINKS }; Files.copy(fromFile, toFile, options);
1.3 Ниже приведен полный пример Java NIO для копирования файла.
package com.mkyong.io.howto; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; public class CopyFile1 { public static void main(String[] args) { String fromFile = "/home/mkyong/dev/db.debug.conf"; String toFile = "/home/mkyong/live/db.conf"; try { copyFileNIO(fromFile, toFile); } catch (IOException e) { e.printStackTrace(); } System.out.println("Copy file is done."); } public static void copyFileNIO(String from, String to) throws IOException { Path fromFile = Paths.get(from); Path toFile = Paths.get(to); // if fromFile doesn't exist, Files.copy throws NoSuchFileException if (Files.notExists(fromFile)) { System.out.println("File doesn't exist? " + fromFile); return; } // if toFile folder doesn't exist, Files.copy throws NoSuchFileException // if toFile parent folder doesn't exist, create it. Path parent = toFile.getParent(); if(parent!=null){ if(Files.notExists(parent)){ Files.createDirectories(parent); } } // default - if toFile exist, throws FileAlreadyExistsException Files.copy(fromFile, toFile); // if toFile exist, replace it. // Files.copy(fromFile, toFile, StandardCopyOption.REPLACE_EXISTING); // multiple StandardCopyOption /*CopyOption[] options = { StandardCopyOption.REPLACE_EXISTING, StandardCopyOption.COPY_ATTRIBUTES, LinkOption.NOFOLLOW_LINKS }; Files.copy(fromFile, toFile, options);*/ } }
2. Общий доступ Apache IO
В старые времена (до Java 7) commons-io был самым простым решением для копирования файла на Java.
commons-io commons-io 2.7
import org.apache.commons.io.FileUtils; public static void copyFileCommonIO(String from, String to) throws IOException { File fromFile = new File(from); File toFile = new File(to); FileUtils.copyFile(fromFile, toFile); }
3. Гугл Гуава
Многие проекты начинают использовать Гуава и предпочитают файлы Гуавы .копировать
, с тем же именем, что и у Java NIO, убедитесь, что вы импортируете правильные пакеты com.google.common.io . Файлы
.
com.google.guava guava 29.0-jre
public static void copyFileGuava(String from, String to) throws IOException { File fromFile = new File(from); File toFile = new File(to); // @Beta? com.google.common.io.Files.copy(fromFile, toFile); }
Файлы Гуавы класс доступен с версии 1.0, понятия не имею, почему в
Файлах.копировать
все еще есть @Бета
аннотация на нем?
package com.google.common.io; public final class Files { //.. @Beta public static void copy(File from, File to) throws IOException { checkArgument(!from.equals(to), "Source %s and destination %s must be different", from, to); asByteSource(from).copyTo(asByteSink(to)); }
4. Обычная Ява
В этом примере используется простой Ява Входной поток
и OutputStream
для копирования файла.
public static void copyFilePlainJava(String from, String to) throws IOException { InputStream inStream = null; OutputStream outStream = null; try { File fromFile = new File(from); File toFile = new File(to); inStream = new FileInputStream(fromFile); outStream = new FileOutputStream(toFile); byte[] buffer = new byte[1024]; int length; while ((length = inStream.read(buffer)) > 0) { outStream.write(buffer, 0, length); outStream.flush(); } } finally { if (inStream != null) inStream.close(); if (outStream != null) outStream.close(); } }
Скачать Исходный Код
$клон git $клон git
$cd java-ввод-вывод
Рекомендации
- Файл Копирования учебника Java
- Guava – Основные библиотеки Google для Java
- Входной поток JavaDoc
- Выходной поток JavaDoc
- Общий доступ IO
Оригинал: “https://mkyong.com/java/how-to-copy-file-in-java/”