java.security.AccessControlException:拒绝访问(java.io.FilePermission

ars*_*nal 23 java security file-io file-permissions accesscontrolexception

final File parentDir = new File("S:\\PDSPopulatingProgram");
parentDir.mkdir();
final String hash = "popupateData";
final String fileName = hash + ".txt";
final File file = new File(parentDir, fileName);
file.createNewFile(); // Creates file PDSPopulatingProgram/popupateData.txt
Run Code Online (Sandbox Code Playgroud)

我正在尝试在文件夹中创建一个文件但我得到例外

java.security.AccessControlException: Access denied
Run Code Online (Sandbox Code Playgroud)

我在Windows环境中工作.我可以从Windows资源管理器创建一个文件夹,但不能从Java代码创建.

我该如何解决这个问题?

Pet*_*y B 20

在您<jre location>\lib\security\java.policy尝试添加:

grant { permission java.security.AllPermission; };

并看看它是否允许你.如果是这样,您将必须添加更多细化权限.

看到:

Java 8文档的java.policy文件

http://java.sun.com/developer/onlineTraining/Programming/JDCBook/appA.html

  • 那不是特别安全.浏览互联网,任何网站都可以在您的计算机上运行任何代码. (4认同)
  • @ TomHawtin-tackline这显然只适用于调试,这就是为什么我说"看看它是否允许你.如果是这样,你将不得不添加更细粒度的权限." (2认同)

Nav*_*ved 10

虽然不建议这样做,但是如果你真的想让你的web应用程序访问其部署目录之外的文件夹.您需要在java.policy文件中添加以下权限(路径与Petey B的回复相同)

permission java.io.FilePermission "your folder path", "write"
Run Code Online (Sandbox Code Playgroud)

在你的情况下,它会

permission java.io.FilePermission "S:/PDSPopulatingProgram/-", "write"
Run Code Online (Sandbox Code Playgroud)

/-意味着此文件夹中的任何文件或子文件夹.

警告:但是这样做会引发一些安全风险.

  • 特别感谢提及"/ - ".在Windows上,它不适用于路径中的反斜杠(例如"\ - "),我认为通配符操作符将是"*",这导致我直接进入配置地狱...... (2认同)