【发布时间】:2014-07-21 07:14:30
【问题描述】:
操作不允许错误。
以前相同的代码可以正常工作。我希望最近 Mac OS 上的一些变化是导致它的原因。
Applet jar 已完美签名。所以我认为签名不是问题。
我正在尝试使用
在当前登录的用户目录下创建文件夹 String userHomePath = System.getProperty("user.home");
**new File(userHomePath +" path ").mkdirs() returns false**
因为它没有在其下创建文件/文件夹的权限。
尝试了以下方法来设置权限,但失败并出现同样的“操作不允许错误”
//using PosixFilePermission to set file permissions 777
Set<PosixFilePermission> perms = new HashSet<PosixFilePermission>();
//add owners permission
perms.add(PosixFilePermission.OWNER_READ);
perms.add(PosixFilePermission.OWNER_WRITE);
perms.add(PosixFilePermission.OWNER_EXECUTE);
//add group permissions
perms.add(PosixFilePermission.GROUP_READ);
perms.add(PosixFilePermission.GROUP_WRITE);
perms.add(PosixFilePermission.GROUP_EXECUTE);
//add others permissions
perms.add(PosixFilePermission.OTHERS_READ);
perms.add(PosixFilePermission.OTHERS_WRITE);
perms.add(PosixFilePermission.OTHERS_EXECUTE);
Files.setPosixFilePermissions(Paths.get(path, ""), perms);
如果我在 Mac 上的 Java 类的 Main 方法上运行相同的文件夹创建代码,它会完美运行。而且,如果我使用 Eclipse IDE 上的导出选项为该小程序制作可运行的 jar,它工作正常。它能够在这两种情况下创建文件夹。
而且它也适用于 Windows 操作系统。
我搜索了使用 Java 小程序设置 MAC 权限,但找不到任何可行的解决方案。
我也尝试过像下面这样设置权限,它也会导致同样的错误“操作不允许”。
private static void createParent(File directory){
String folderName = directory.getAbsolutePath();
if(directory.exists()){
String [] cmdArray = new String[2];
cmdArray[0] = "chmod -R 4777 "+folderName;
Runtime rt = Runtime.getRuntime();
try {
Process proc = rt.exec(cmdArray);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}else{
folderName = folderName.substring(0,folderName.lastIndexOf(File.separator));
File file = new File(folderName);
createParent(file);
directory.mkdir();
createParent(file);
}
}
【问题讨论】:
-
小程序可以在 Windows 还是 Linux 上运行?
-
@ElliottFrisch :它在 Windows 上完美运行。而且我们不支持 Linux
-
检查您的 java 安全设置。如果那是
very high,则不能创建文件或文件夹。应该是high。 -
@Rahul:我已经用“'Medium'”(可能的最低设置)验证了它。它失败。顺便说一句,感谢您的建议。
标签: java macos file security applet