好吧,所以我尝试用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)
这是胜利10主持人的kubuntu客人。
我 CAN 按终端(mv baz ./foo/bar/baz
)移动文件夹。似乎java应用程序没有注意到它可以做到这一点。
如何解决此问题(不将内容移出共享文件夹)?
CODE
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;
}
}
}
答案 0 :(得分:0)
据我所知,这是NIO中的一个实际问题。我发现类似的问题在运行macOS的Ubuntu VirtualBox VM上使用Eclipse / jgit。
我唯一的建议是改为在VM中使用本地文件夹。