- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我是 Java 的 nio 包的新手,我不知道如何将文件从一个目录获取到另一个目录。我的程序应该根据特定条件读取目录及其子目录和进程文件。我可以使用 Files.walkFileTree 获取所有文件,但是当我尝试移动它们时,我得到一个 java.nio.file.AccessDeniedException。
如果我尝试复制它们,我会收到 DirectoryNotEmptyException。我无法在 Google 上找到任何帮助。我确信一定有一种简单的方法可以将文件从一个目录移动到另一个目录,但我想不出来。
这就是我正在尝试获取 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 在 sun.nio.fs.WindowsFileCopy.move(WindowsFileCopy.java:372) 在 sun.nio.fs.WindowsFileSystemProvider.move(WindowsFileSystemProvider.java:287) 在 java.nio.file.Files.move(Files.java:1347) 在 cgba.rac.errorprocessor.ErrorProcessor.findMatchingPdf(ErrorProcessor.java:149) 在 cgba.rac.errorprocessor.ErrorProcessor.matchErrorFile(ErrorProcessor.java:81) 在 cgba.rac.errorprocessor.ErrorProcessor.main(ErrorProcessor.java:36)
最佳答案
Files.move(file, cgbaFile.getParent(), StandardCopyOption.REPLACE_EXISTING);
对于目标,您要提供要将文件移动到的目录。这是不正确的。目标应该是您希望文件具有的新路径名——新目录加上文件名。
例如,假设您想将 /tmp/foo.txt
移动到 /var/tmp
目录。你在调用 Files.move("/tmp/foo.txt", "/var/tmp")
而你应该调用 Files.move("/tmp/foo.txt ", "/var/tmp/foo.txt")
.
您收到该特定错误是因为 JVM 正在尝试删除目标目录以便用文件替换它。
其中一个应该生成正确的目标路径:
Path target = cgbaFile.resolveSibling(file.getFileName());
Path target = cgbaFile.getParent().resolve(file.getFileName());
关于java - 如何将文件移动到非空目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26678539/
在纯 Ruby 中删除目录中所有文件的安全有效方法是什么?我写了 Dir.foreach(dir_path) {|f| File.delete(f) if f != '.' && f != '..'}
我有一个单元测试(在 VS2008 或 VS2010 中使用 MSTest),我在其中创建了一个这样的文件夹: [TestMethod] public void TestMethod1() {
有人在 CVS 中创建了一个空包。我想在 Intellij 中 checkout 这个包,但 intellij 中没有出现任何内容。 有人知道原因以及如何解决吗? 最佳答案 您必须在结帐 Intell
我是一名优秀的程序员,十分优秀!