I am using the NIO libraries but I am getting a strange error when I try to move files from one directory to another.
String yearNow = new SimpleDateFormat("yyyy").format( Calendar.getInstance().getTime()); try { DirectoryStream<Path> curYearStream = Files.newDirectoryStream(sourceDir, "{" + yearNow + "*}"); //Glob for current year Path newDir = Paths.get(sourceDir + "//" + yearNow); if (!Files.exists(newDir) || !Files.isDirectory(newDir)) { Files.createDirectory(newDir); //create 2014 directory if it doesn't exist } }
Iterate over elements that start with “2014” and move them in the new directory (newDir, which is also called 2014)
for (Path p : curYearStream) { System.out.println(p); //it prints out exactly the files that I need to move Files.move(p, newDir); //java.nio.file.FileAlreadyExistsException }
I get the java.nio.file.FileAlreadyExistsException because my folder (2014) already exists. What I actually want to do is move all the files that start with “2014” INSIDE the 2014 directory.
Advertisement
Answer
Files.move
is not equivalent to the mv
command. It won’t detect that the destination is a directory and move files into there.
You have to construct the full destination path, file by file. If you want to copy /src/a.txt
to /dest/2014/
, the destination path needs to be /dest/2014/a.txt
.
You may want to do something like this:
File srcFile = new File("/src/a.txt"); File destDir = new File("/dest/2014"); Path src = srcFile.toPath(); Path dest = new File(destDir, srcFile.getName()).toPath(); // "/dest/2014/a.txt"