我对Java的nio包不熟悉,无法弄清如何将文件从一个目录移动到另一个目录。我的程序应该遍历目录及其子目录,并根据特定条件处理文件。我可以使用Files.walkFileTree获取所有文件,但是当我尝试移动它们时,我会得到java.nio.file.AccessDeniedException。
如果我尝试复制它们,我会得到DirectoryNotEmptyException。我在谷歌上找不到任何帮助。我相信必须有一种简单的方法将文件从一个目录移动到另一个目录,但我想不出来。
这是我尝试却得到DirectoryNotEmptyException的代码:
private static void findMatchingPdf(Path file, ArrayList cgbaFiles) {
Iterator iter = cgbaFiles.iterator();
String pdfOfFile = file.getFileName().toString().substring(0, file.getFileName().toString().length() - 5) + ".pdf";
while (iter.hasNext()){
Path cgbaFile = (Path) iter.next();
if (cgbaFile.getFileName().toString().equals(pdfOfFile)) {
try {
Files.move(file, cgbaFile.getParent(), StandardCopyOption.REPLACE_EXISTING);
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
}
我正在遍历文件列表,尝试将同名的 .meta 文件与 .pdf 文件匹配。一旦找到匹配项,我就将元数据文件移动到包含该 pdf 文件的目录中。
但是,我收到以下异常信息: java.nio.file.DirectoryNotEmptyException: C:\test\CGBA-RAC\Part-A at sun.nio.fs.WindowsFileCopy.move(WindowsFileCopy.java:372) at sun.nio.fs.WindowsFileSystemProvider.move(WindowsFileSystemProvider.java:287) at java.nio.file.Files.move(Files.java:1347) at cgba.rac.errorprocessor.ErrorProcessor.findMatchingPdf(ErrorProcessor.java:149) at cgba.rac.errorprocessor.ErrorProcessor.matchErrorFile(ErrorProcessor.java:81) at cgba.rac.errorprocessor.ErrorProcessor.main(ErrorProcessor.java:36)