Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Does Files.copy(Path,Path) create directories?

I have a bunch of text files(say ss1.txt,ss2.txt,ss3.txt etc.) under a directory with my Java program (C:/Users/java/dir1)?
I want to move my txt files to a new directory that hasn't been created yet. I have a String address for all of my files and I think I can turn them into Paths using

Path path = Paths.get(textPath);

Would creating a String (C:/Users/java/dir2), turning that into a path using the above method and then using

Files.copy(C:/Users/java/dir1/ss1.txt,C:/Users/java/dir2)

result in ss1.text being copied to a new directory?

like image 816
knowads Avatar asked Apr 13 '15 03:04

knowads


People also ask

Does file copy create directory?

Method Files. copy(C:/Users/java/dir1/ss1. txt,C:/Users/java/dir2) will not create directory, it will create file dir2 in directory java that will contain ss1. txt data.

Does CP command create destination directory?

File copying is a common file operation when we work with the Linux command-line. Usually, we'll use the cp command to copy files. However, the cp command won't work if the target directory doesn't exist.

Which method is used to copy a directory to another location ()?

copy() method in Python is used to copy the content of source file to destination file or directory.

What is files copy in Java?

The copy() method of java. nio. file. Files Class is used to copy bytes from a file to I/O streams or from I/O streams to a file. I/O Stream means an input source or output destination representing different types of sources e.g. disk files.


2 Answers

This is very easy with Files.createDirectories()

Path source = Path.of("c:/dir/dir-x/file.ext");
Path target = Path.of("c:/target-dir/dir-y/target-file.ext");
Files.createDirectories(target.getParent());
Files.copy(path, target, StandardCopyOption.REPLACE_EXISTING);    

And do not worry if the directories already exist, in that case it will do nothing and keep going...

like image 179
Daniel De León Avatar answered Sep 20 '22 13:09

Daniel De León


Method Files.copy(C:/Users/java/dir1/ss1.txt,C:/Users/java/dir2) will not create directory, it will create file dir2 in directory java that will contain ss1.txt data.

You could try it with this code:

File sourceFile = new File( "C:/Users/java/dir1/ss1.txt" );
Path sourcePath = sourceFile.toPath();

File destFile = new File( "C:/Users/java/dir2" );
Path destPath = destFile.toPath();

Files.copy( sourcePath, destPath );

Remember use java.nio.file.Files and java.nio.file.Path.

If you want to use class form java.nio to copy files from one directory to other you should use Files.walkFileTree(...) method. You can see solution here Java: Using nio Files.copy to Move Directory.

Or you can simply use `FileUtils class from apache http://commons.apache.org/proper/commons-io/ library, available since version 1.2.

File source = new File("C:/Users/java/dir1");
File dest = new File("C:/Users/java/dir2");
try {
    FileUtils.copyDirectory(source, dest);
} catch (IOException e) {
    e.printStackTrace();
}
like image 45
Mateusz Sroka Avatar answered Sep 18 '22 13:09

Mateusz Sroka