Copy file in Java and replace existing target
You need to pass Path
arguments as explained by the error message:
Path from = cfgFilePath.toPath(); //convert from File to PathPath to = Paths.get(strTarget); //convert from String to PathFiles.copy(from, to, StandardCopyOption.REPLACE_EXISTING);
That assumes your strTarget
is a valid path.
As a complement to @assylias' answer:
If you use Java 7, drop File
entirely. What you want is Path
instead.
And to get a Path
object matching a path on your filesystem, you do:
Paths.get("path/to/file"); // argument may also be absolute
Get used to it real fast. Note that if you still use APIs which require File
, Path
has a .toFile()
method.
Note that if you are in the unfortunate case where you use an API which returns File
objects, you can always do:
theFileObject.toPath()
But in code of yours, use Path
. Systematically. Without a second thought.
EDIT Copying a file to another using 1.6 using NIO can be done as such; note that the Closer
class is inspited by Guava:
public final class Closer implements Closeable{ private final List<Closeable> closeables = new ArrayList<Closeable>(); // @Nullable is a JSR 305 annotation public <T extends Closeable> T add(@Nullable final T closeable) { closeables.add(closeable); return closeable; } public void closeQuietly() { try { close(); } catch (IOException ignored) { } } @Override public void close() throws IOException { IOException toThrow = null; final List<Closeable> l = new ArrayList<Closeable>(closeables); Collections.reverse(l); for (final Closeable closeable: l) { if (closeable == null) continue; try { closeable.close(); } catch (IOException e) { if (toThrow == null) toThrow = e; } } if (toThrow != null) throw toThrow; }}// Copy one file to another using NIOpublic static void doCopy(final File source, final File destination) throws IOException{ final Closer closer = new Closer(); final RandomAccessFile src, dst; final FileChannel in, out; try { src = closer.add(new RandomAccessFile(source.getCanonicalFile(), "r"); dst = closer.add(new RandomAccessFile(destination.getCanonicalFile(), "rw"); in = closer.add(src.getChannel()); out = closer.add(dst.getChannel()); in.transferTo(0L, in.size(), out); out.force(false); } finally { closer.close(); }}
package main.java;import java.io.IOException;import java.nio.file.Files;import java.nio.file.Path;import java.nio.file.Paths;import java.nio.file.StandardCopyOption;public class CopyFileOnExist { public static void main(String[] args) { Path sourceDirectory = Paths.get("C:/Users/abc/Downloads/FileNotFoundExceptionExample/append.txt"); Path targetDirectory = Paths.get("C:/Users/abc/Downloads/FileNotFoundExceptionExample/append5.txt"); //copy source to target using Files Class try { Files.copy(sourceDirectory, targetDirectory,StandardCopyOption.REPLACE_EXISTING); } catch (IOException e) { System.out.println(e.toString()); } }}