Java IO для копирования одного файла в другой
У меня есть два объекта Java.io.File file1 и file2. Я хочу скопировать содержимое из файла1 в файл2. Есть ли стандартный способ сделать это без меня, чтобы создать метод, который читает файл1 и записывать в файл2
Ответы
Ответ 1
Нет, для этого нет встроенного метода. Наиболее близким к тому, что вы хотите выполнить, является метод transferFrom
из FileOutputStream
, например:
FileChannel src = new FileInputStream(file1).getChannel();
FileChannel dest = new FileOutputStream(file2).getChannel();
dest.transferFrom(src, 0, src.size());
И не забывайте обрабатывать исключения и закрывать все в блоке finally
.
Ответ 2
Если вы хотите быть ленивым и сойти с рук при написании минимального кода, используйте
FileUtils.copyFile(src, dest)
от Apache IOCommons
Ответ 3
Нет. Каждый долговременный Java-программист имеет свой собственный пояс, который включает такой метод. Здесь моя.
public static void copyFileToFile(final File src, final File dest) throws IOException
{
copyInputStreamToFile(new FileInputStream(src), dest);
dest.setLastModified(src.lastModified());
}
public static void copyInputStreamToFile(final InputStream in, final File dest)
throws IOException
{
copyInputStreamToOutputStream(in, new FileOutputStream(dest));
}
public static void copyInputStreamToOutputStream(final InputStream in,
final OutputStream out) throws IOException
{
try
{
try
{
final byte[] buffer = new byte[1024];
int n;
while ((n = in.read(buffer)) != -1)
out.write(buffer, 0, n);
}
finally
{
out.close();
}
}
finally
{
in.close();
}
}
Ответ 4
Начиная с Java 7 вы можете использовать Files.copy()
из стандартной библиотеки Java.
Вы можете создать метод-оболочку:
public static void copy(String sourcePath, String destinationPath) throws IOException {
Files.copy(Paths.get(sourcePath), new FileOutputStream(destinationPath));
}
это можно использовать следующим образом:
copy("source.txt", "dest.txt");
Ответ 5
В Java 7 вы можете использовать Files.copy()
, и очень важно: Не забудьте закрыть OutputStream после создания нового файла.
OutputStream os = new FileOutputStream(targetFile);
Files.copy(Paths.get(sourceFile), os);
os.close();
Ответ 6
Или используйте Files.copy(file1, file2) из библиотеки Google Guava.