I have two Java.io.File objects file1 and file2. I want to copy the contents from file1 to file2. Is there an standard way to do this without me having to create a method that reads file1 and write to file2
Asked
Active
Viewed 5.8k times
20
-
4See http://stackoverflow.com/questions/106770/standard-concise-way-to-copy-a-file-in-java – TwentyMiles Mar 26 '10 at 00:19
-
for files and strings, you would rather use the Utils classes like FileUtils and StringUtils. They have a wide range of predefined methods to manipulate files and strings. They are included in the Apache Common package which you can add it ot your pom.xml – Mahmoud Turki May 24 '19 at 14:22
6 Answers
32
No, there is no built-in method to do that. The closest to what you want to accomplish is the transferFrom
method from FileOutputStream
, like so:
FileChannel src = new FileInputStream(file1).getChannel();
FileChannel dest = new FileOutputStream(file2).getChannel();
dest.transferFrom(src, 0, src.size());
And don't forget to handle exceptions and close everything in a finally
block.

João Silva
- 89,303
- 29
- 152
- 158
-
A more complete (and correct) version of this answer is available here: http://stackoverflow.com/questions/106770/standard-concise-way-to-copy-a-file-in-java/115086#115086. Thanks to http://stackoverflow.com/users/92937/twentymiles for schooling all of us. – vkraemer Mar 26 '10 at 03:20
-
for files and strings, you would rather use the Utils classes like FileUtils and StringUtils. They have a wide range of predefined methods to manipulate files and strings. They are included in the Apache Common package which you can add it ot your pom.xml – Mahmoud Turki May 24 '19 at 14:22
29
If you want to be lazy and get away with writing minimal code use
FileUtils.copyFile(src, dest)
from Apache IOCommons
-
3I'm a fan of minimal code. Not sure why it's "lazy" to use a utility package. I love StringUtils. – Jeremy Goodell Feb 18 '14 at 20:32
9
Since Java 7 you can use Files.copy()
from Java's standard library.
You can create a wrapper method:
public static void copy(String sourcePath, String destinationPath) throws IOException {
Files.copy(Paths.get(sourcePath), new FileOutputStream(destinationPath));
}
that can be used in the following way:
copy("source.txt", "dest.txt");

ROMANIA_engineer
- 54,432
- 29
- 203
- 199

Michał Kosmulski
- 9,855
- 1
- 32
- 51
9
No. Every long-time Java programmer has their own utility belt that includes such a method. Here's mine.
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();
}
}

Jonathan Feinberg
- 44,698
- 7
- 80
- 103
4
In Java 7 you can use Files.copy()
and very important is: Do not forget to close the OutputStream after creating the new file.
OutputStream os = new FileOutputStream(targetFile);
Files.copy(Paths.get(sourceFile), os);
os.close();

Radu Linu
- 1,143
- 13
- 29