【问题标题】:virtualbox - cannot move files within shared folder from javavirtualbox - 无法从java移动共享文件夹中的文件
【发布时间】:2026-02-16 13:40:01
【问题描述】:

好的,所以我尝试使用 java 移动一些文件...

Exception in thread "main" java.nio.file.FileSystemException: baz -> ./foo/bar/baz: Operation not permitted
    at sun.nio.fs.UnixException.translateToIOException(UnixException.java:91)
    at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102)
    at sun.nio.fs.UnixCopyFile.move(UnixCopyFile.java:451)
    at sun.nio.fs.UnixFileSystemProvider.move(UnixFileSystemProvider.java:262)
    at java.nio.file.Files.move(Files.java:1347)

这是 win 10 主机上的 kubuntu 客人。

可以通过终端 (mv baz ./foo/bar/baz) 移动文件夹。似乎 java 应用程序没有得到它可以做到这一点的通知。

如何解决此问题(无需将内容移出共享文件夹)?

代码

String targetDir ="./foo/bar/"
Path bazDir  = Paths.get(MyConstants.BAZ_DIR);
DirectoryRemover.remove(Paths.get(targetDir).resolve(MyConstants.BAZ_DIR)); //just to be sure
Files.move(bazDir,Paths.get(targetDir).resolve(MyConstants.BAZ_DIR), StandardCopyOption.REPLACE_EXISTING);

在哪里

import java.io.IOException;
import java.nio.file.FileVisitResult;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.SimpleFileVisitor;
import java.nio.file.attribute.BasicFileAttributes;

public class DirectoryRemover {
    public static void remove(Path obstacle){
        try {
            Files.walkFileTree(obstacle, new FileWalker());
        }catch(Exception e){
            //didn't exist / already deleted, etc.
        }
    }

    static class FileWalker extends SimpleFileVisitor<Path>{
        @Override
        public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
            Files.delete(file);
            return FileVisitResult.CONTINUE;
        }

        @Override
        public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
            Files.delete(dir);
            return FileVisitResult.CONTINUE;
        }
    }

}

【问题讨论】:

  • 请发布您的代码
  • 是否已经有一个foo 文件夹下有bar?你有权限写“foo/bar”吗?
  • @nlopez 查看编辑
  • @ElliottFrisch 有——事实上,如果它们不存在并且应用程序已经在那里保存了一些文件,它们是由应用程序自己创建的。

标签: java file-io virtual-machine virtualbox


【解决方案1】:

据我所知,这是 NIO 中的一个实际问题。我观察到类似的问题,例如在 macOS 上运行的 Ubuntu VirtualBox VM 上使用 Eclipse/jgit。

我唯一的建议是改用虚拟机中的本地文件夹。

【讨论】: